比赛传送门
A
不难发现,在已有"CUC"上,增加一个"UC"即可使"CUC"子串的数量 $+1$
Code
1 | void solve() { |
B
简单dp
记 $dp_{i,j}$ , $i$ 表示当前走到第几阶, $j$ 表示是否有过一次走两步的行为
$$dp_{i,1}=dp_{i-2,1}+dp_{i-2,0} $$
$$dp_{i,0}=dp_{i-1,0} $$
注意预处理,否则会超时
Code
1 | const int N=1e5+4;const int mod=998244353; |
C
给面积求 $c$ ,可以想到定积分求面积,那么需要知道零点来确定区间范围
$$x=\frac{b\pm\sqrt{b^2+4c}}{2} $$
于是可以确定左右零点$x0,x1$
先对 $y$定积分一下,得到:
$$S=-\frac{1}{3}x^3\biggr|_{x0}^{x1}+\frac{b}{2}x^2\biggr|_{x0}^{x1}+cx\biggr|_{x0}^{x1} $$
可以发现面积和 $c$ 是有单调关系的,考虑二分
补充:为什么说有单调关系?
因为 $c$ 越大, $x1$ 越靠右, $x0$ 越来越靠左,因此面积也就越大
另外要注意, $x0$ 最小只能取 $0$
Code
1 | void solve() { |
D
$0,1$ 互换位置是没有代价的,也就是你只要数量刚好,代价就可以是 $0$
数量不刚好怎么办?
两个相邻的相同数可以转置变成另一种,一次可以转 $2$ 个
也就是如果两个矩阵相差数量为偶数,代价为 $0$
相差数量为奇数,代价为 $1$
Code
1 | void solve() { |
E
$x,y$ 都小于 $10$ 时自己算一下判断,此时开ll是不会爆的
都大于 $10$ 的情况下,$x+y$和$x*y$ 都太弱了
指数函数增长速度比幂函数大
所以比较一下 $x$ 和 $y$ 的大小,哪个大,对应为指数的就是最大的数
注意特判 $x=1$ || $y=1$ 的情况
Code
1 | int fastpow(int base,int exp) { |
F
感觉是本场最难的题之一
先看看小数据的情况:
对于 $1-7$和 $9$ 和 $11$ 无法分,先手直接输
对于 $8$ 分一个 $4$ 出来,后手输
对于 $10$ 分一个 $4$ 出来,后手输
注意到,只要将 $n$ 分为 $4,6,9$ 和另一个合数,后手直接输掉
证明:对于$n≥12$ ,$n-4,n-6,n-9$中至少有一个是合数
$n-6$ 和 $n-9$ 至少有一个是偶数,且由于$n≥12$,那么该偶数肯定为合数
Code
1 | void solve() { |
G
dp
注意到,只能选 $3,6,9$ 长度的子数组
记$dp_{i}$为以 $i$ 为结尾的最大染色数
用前缀和快速求前 $3,6,9$ 子数组中的 $1,2,3$ 的个数
如果都相等就转移
$$dp_{i}=dp_{i-3}+3 $$
$$dp_{i}=dp_{i-6}+6 $$
$$dp_{i}=dp_{i-9}+9 $$
Code
1 | void solve() { |
H
已无言
存所有连续 $0$ 子数组的左端点和右端点到 $multiset$,方便二分修改
记录所有连续 $0$ 子数组长度子数组对应的个数,方便查询答案
是否会超时???
修改时间复杂度$O(logn)$
查询时间复杂度$O(\sqrt{n})$ ,因为所有长度集齐了最多也就这么多
讲一下大致操作吧,实现我写成石了
0->1:
看一下有没有覆盖到某一连续 $0$ 段,有的话说明该操作将其分为两段
1->0:
连接左段和右段
或者单开一段
Code
1 | void solve() { |
I
爆搜所有排列,$set$去重一下即可
Code
1 | void solve() { |
J
最优先处理的肯定是,可以直接让字符种类一次变成 $3$ 的
讨论其他的:
分长度讨论,无论$1,2,≥3$,加一个种类,给答案加的值都一样,但是给 $≥3$ 加有潜在收益,肯定优先加
于是得出结论,长度大的优先加,同样大的,种类数最多的优先加,优先队列实现即可
当然,注意特判一下修改没效果的
依旧石山
Code
1 | void solve() { |
K
扩展域并查集,将每一个朋友 $i$ 分为两个逻辑阵营 $A(i),B(i+n)$
给出 $(x,y)$ 为敌人(即不同阵营) :
$fa(x)=fa(y)$ 或者 $fa(x+n)=fa(y+n)$ 说明俩人不是敌人,矛盾
否则,说明该声明正确,将不同阵营的 $x和y$ 合并(敌人的敌人是朋友):
$$merge(x,y+n) $$
$$merge(y,x+n) $$
Code
1 | const int N=4e5+5; |
说些什么吧!