草,赛时写题解(
- A
分奇偶讨论一下,可以知道方案数为 (lfloorfrac{n}{2} floor)。
- B
首先可以随便构造使得前 (a) 个字符中有 (b) 个不同字母。然后对于任意的 (iin [a+1, n]),令 (s_i=s_{i-a}) 即可。
- C
设最大的组有 (x) 人,非空的组有 (y) 个,如果 (x e y),显然答案可以取到 (min(x, y)),否则,最大的组会被取空,答案要 (-1)。
- D
如果保证每一行、每一列、每个九宫格都恰好有一个数被修改了,不难看出刚好满足题意。
设行、列都由 (0) 开始,可以有下列构造:
for (int i = 0; i <= 2; ++i)
for (int j = 0; j <= 2; ++j)
s[i * 3 + j][i + 3 * j] = (s[i * 3 + j][i + 3 * j] - '0') % 9 + '1';
- E
发现颜色只有 (200) 种,考虑将所有非空的颜色对 ((u, v)) 都拉出来做一遍。将两种颜色对应的位置归并排序一下,枚举两边的 block 长度,左右各维护一个指针,中间部分用前缀和算即可。
设 (mathrm{cnt}) 表示每次的非空颜色数,单次复杂度可以达到 (mathrm{cnt}^2+mathrm{cnt}cdot n)。由于 (mathrm{cnt}leq n),因此最坏情况下,复杂度是 (Oleft(mathrm{cnt}cdot sum n ight)) 级别的,可以通过。
- F
将网格抽象成图,发现每个连通块都是一棵内向基环树。不难发现,每个连通块能容纳的机器人个数恰好等于环长 (r)。在环上任选一点,沿着反边 dfs,可以给每个点标一个距离 (d_i)。发现所有 (d_imod r) 相同的点只能选一个。因此,对于每一个 (d_imod r) 的值,如果其中存在黑格子,则可以给答案贡献 (1)。
妙啊,写完题解的时候比赛还没结束(