CF1335 简要题解
草,赛时写题解(
- A
分奇偶讨论一下,可以知道方案数为 \(\lfloor\frac{n}{2}\rfloor\)。
- B
首先可以随便构造使得前 \(a\) 个字符中有 \(b\) 个不同字母。然后对于任意的 \(i\in [a+1, n]\),令 \(s_i=s_{i-a}\) 即可。
- C
设最大的组有 \(x\) 人,非空的组有 \(y\) 个,如果 \(x\ne 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\),因此最坏情况下,复杂度是 \(O\left(\mathrm{cnt}\cdot \sum n\right)\) 级别的,可以通过。
- F
将网格抽象成图,发现每个连通块都是一棵内向基环树。不难发现,每个连通块能容纳的机器人个数恰好等于环长 \(r\)。在环上任选一点,沿着反边 dfs,可以给每个点标一个距离 \(d_i\)。发现所有 \(d_i\bmod r\) 相同的点只能选一个。因此,对于每一个 \(d_i\bmod r\) 的值,如果其中存在黑格子,则可以给答案贡献 \(1\)。
妙啊,写完题解的时候比赛还没结束(