【题解】CF1944

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
  • 综上所述,我们只需要判断一个串:
  1. 是否回文
  2. 是否形如 ABABAB
  3. 是否形如 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\) 构造方法同上,只需单独染最后两个多出来的点即可

CF1944F

简要题意

  • 题意:给定序列,每次选择长度 \(>1\) 的区间减 \(1\),若可以变为全 \(0\) 序列,那么是好的,问存在多少长度为 \(n\) 且元素 \(\in[0,k]\) 的好序列。
  • \(n\leq 5000\)

Solution

  • 显然先找“好数组”的充要条件。对原数组 \(a\) 差分,设 \(b_i = a_i - a_{i - 1}\)。那么一次可以选择一对 \((i, j)\) 满足 \(i \le j - 2\),然后给 \(b_i\)\(1\),给 \(b_j\)\(1\)
  • 从左往右操作。注意到我们不能操作相邻的一对元素,所以若某个时刻 \(b_i > 0\)\(b_{1 \sim i - 2}\) 都为 \(0\) 就不合法。这就是充要条件。
  • 充要条件可以表述成 \(b_i + \sum\limits_{j = 1}^{i - 2} b_j \ge 0\),即 \(a_i - a_{i - 1} + a_{i - 2} \ge 0\),注意 \(a_0 = a_{n + 1} = 0\)
  • 对于 \(n \le 400\) 可以直接做一个 \(O(n^3)\) dp,设 \(f_{i, j, k}\) 为考虑了 \([1, i]\) 的前缀,\(a_{i - 1} = j, a_i = k\) 的方案数。因为合法的 \(a_{i - 2}\) 是一段后缀,所以预处理后缀和即可做到 \(O(1)\) 转移。
  • 加强版看不懂题解
posted @ 2024-11-07 13:27  yeyou26  阅读(174)  评论(0编辑  收藏  举报