CF1944A
简要题意
给定完全图
删k条边使得从一号点开始的可达点最少
Solution
注意到最多需要删 n-1 条边就可以使得任意一个其他点都到达不了
又注意到只要删的边少于 n-1 就可以从一号点走出去,主要走出去就可以走到任何点
所以这题答案只有两种
如果k≤n-1 答案为n
否则答案为 1
CF1944B
简要题意
给定一个长度为 \(2n\) 的序列 \(a\),包含 \(1\) ~ \(n\) 每个数恰好两次。
对 \(a\) 的前 \(n\) 个元素和后 \(n\) 个元素分别求出长度为 \(2k\) 的子序列 \(l,r\),使得 \(l\) 与 \(r\) 中所有元素的异或和相等,即 \(l_1\oplus l_2\oplus...\oplus l_{2k}=r_1\oplus r_2\oplus...\oplus r_{2k}\)。
Solution
- 我们称前n个数为左边,后n个数为右边
- 注意到对于每一种数,只有两种分配方案
第一种 左右各一个
第二种 都在左或右 - 不难证明左右两边两种数的个数分别相等
- 对于第一种,左右同时取即可
对于第二种,一种一定合法的构造方案是两边都同时取两个,由于2k一定是偶数,所以这种构造一定合法。 - 到这就很清晰了,无脑按照第一/第二种方法构造就可以了,任意一种数不够用了换另一种即可
CF1944C
简要题意
- Alice 和 Bob 在大小为 \(n\) 的数组 \(a\) 上玩一个游戏:Alice 有一个空数组 \(c\) 开始。两位玩家轮流进行游戏,Alice 先开始。
- 在 Alice 的回合中,她从 \(a\) 中选择一个元素,将该元素添加到 \(c\) 中,然后从 \(a\) 中删除该元素。
在 Bob 的回合中,他从 \(a\) 中选择一个元素,然后从 \(a\) 中删除该元素。 - 当数组 \(a\) 为空时游戏结束,游戏的得分定义为 \(c\) 的 MEX。
- Alice 希望最大化得分,而 Bob 希望最小化得分。
- 找出如果两位玩家都采取最佳策略时的游戏最终得分。
Solution
- 显然数的顺序不重要,数的个数重要,直接存桶
- 假定最终答案是 \(x\),那么 \(0\) 到 \(x-1\) 之间的所有数都需要取到
- 显然这 \(x\) 个数都至少得有一个
- 如果一个数有两个,那么 A 可以在 B 拿走一个数之后立刻拿走另一个
也就是说,至少一个数至少有两个,那么 A 一定可以拿到这个数 - 这 \(x\) 个数中,可以有一个数只有一个,它将被 A 一开始就拿走
- 实现:从 0 开始遍历桶,直到第一个位置计数为 0 或者 第二个位置计数为 1,这个位置的下标即为答案 (这是第一个取不到的数)
CF1944D
简要题意
- 定义一个字符串是 \(k\)-good 的,当且仅当该字符串存在长为 \(k\) 的非回文子串。
- 对于字符串 \(t\),定义 \(f(t)\) 为满足 \(t\) 是 \(k\)-good 的正整数 \(k\) 的总和。
- 对于给定的一个长为 \(n\) 的字符串 \(s\),你需要回答 \(q\) 个询问,每次询问给出两个正整数 \(l,r\),求 \(f(s_ls_{l+1}\dots s_r)\) 的值。每个测试点 \(t\) 组测试用例。
- \(1\le t\le 2\cdot 10^4;1\le n,q,\sum n,\sum q\le 2\cdot 10^5;1\le l<r\le n\)
Solution
- 注意到不是 \(k-g\) 的条件很苛刻,考虑什么时候不是 \(k-g\)
- \(k=1\) : 永远不kg
\(k=|S|\):不 kg 当且仅当 S 回文
\(k=奇数\) : 如果不 kg,说明分别从第一,第二个位置开始截取长度为 k 的字串都是回文的,容易推导出这一段一定是形如 ABABA 交替,进而推广到整个串都是 ABABA 交替
\(k=偶数\) : 如果不 kg,类似的,可以推广到整个串都是 AAAAAAAA - 综上所述,我们只需要判断一个串:
- 是否回文
- 是否形如 ABABAB
- 是否形如 AAAAA
- 判后两个是容易的,判回文马拉车即可
CF1944E
简要题意
- 给定树 \(n\leq 5e3\)
- 初始时所有节点都是白色
- 定义操作:选择一个节点,把距离这个节点距离为 \(d\) 的点都变成黑色 \((0\leq d \leq n-1)\)
- 问最少多少次操作把所有点都染成黑的,并输出方案
Solution
- 容易想到直径
- 考虑直径这条链,一次最多染链上的两个点
- 得到答案下界 : \(ceil(n/2)\)
- 注意到染整棵树和染直径所需次数相同,于是只考虑直径
- 得到答案上界:\(n/2+1\) (如果直径上点数是偶数可以取到,如 6)
- 注意到:如果直径上有奇数个点,答案上界等于答案下届,没什么优化空间,直接选定直径中点一层一层染即可
- 考虑长度为 4 的链用于启发:发现长度为 4 的链实际上只需要两次操作
- 如果链上点数是 4 的倍数,那么一定可以取到答案下届(反复按照长度为 4 的链构造即可)
- 现在只剩一种情况:点数是 4 的倍数+2,发现无论如何都不能取到下届(考虑长度为 6 的链)
答案为 \(n/2+1\) 构造方法同上,只需单独染最后两个多出来的点即可