【题解】CF1944

CF1944A

简要题意

给定完全图
删k条边使得从一号点开始的可达点最少

Solution

注意到最多需要删 n-1 条边就可以使得任意一个其他点都到达不了
又注意到只要删的边少于 n-1 就可以从一号点走出去,主要走出去就可以走到任何点
所以这题答案只有两种
如果k≤n-1 答案为n
否则答案为 1

CF1944B

简要题意

给定一个长度为 2n 的序列 a,包含 1 ~ n 每个数恰好两次。
a 的前 n 个元素和后 n 个元素分别求出长度为 2k 的子序列 l,r,使得 lr 中所有元素的异或和相等,即 l1l2...l2k=r1r2...r2k

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,那么 0x1 之间的所有数都需要取到
  • 显然这 x 个数都至少得有一个
  • 如果一个数有两个,那么 A 可以在 B 拿走一个数之后立刻拿走另一个
    也就是说,至少一个数至少有两个,那么 A 一定可以拿到这个数
  • x 个数中,可以有一个数只有一个,它将被 A 一开始就拿走
  • 实现:从 0 开始遍历桶,直到第一个位置计数为 0 或者 第二个位置计数为 1,这个位置的下标即为答案 (这是第一个取不到的数)

CF1944D

简要题意

  • 定义一个字符串是 k-good 的,当且仅当该字符串存在长为 k 的非回文子串。
  • 对于字符串 t,定义 f(t) 为满足 tk-good 的正整数 k 的总和。
  • 对于给定的一个长为 n 的字符串 s,你需要回答 q 个询问,每次询问给出两个正整数 l,r,求 f(slsl+1sr) 的值。每个测试点 t 组测试用例。
  • 1t2104;1n,q,n,q2105;1l<rn

Solution

  • 注意到不是 kg 的条件很苛刻,考虑什么时候不是 kg
  • k=1 : 永远不kg
    k=|S|:不 kg 当且仅当 S 回文
    k= : 如果不 kg,说明分别从第一,第二个位置开始截取长度为 k 的字串都是回文的,容易推导出这一段一定是形如 ABABA 交替,进而推广到整个串都是 ABABA 交替
    k= : 如果不 kg,类似的,可以推广到整个串都是 AAAAAAAA
  • 综上所述,我们只需要判断一个串:
  1. 是否回文
  2. 是否形如 ABABAB
  3. 是否形如 AAAAA
  • 判后两个是容易的,判回文马拉车即可

CF1944E

简要题意

  • 给定树 n5e3
  • 初始时所有节点都是白色
  • 定义操作:选择一个节点,把距离这个节点距离为 d 的点都变成黑色 (0dn1)
  • 问最少多少次操作把所有点都染成黑的,并输出方案

Solution

  • 容易想到直径
  • 考虑直径这条链,一次最多染链上的两个点
  • 得到答案下界 : ceil(n/2)
  • 注意到染整棵树和染直径所需次数相同,于是只考虑直径
  • 得到答案上界:n/2+1 (如果直径上点数是偶数可以取到,如 6)
  • 注意到:如果直径上有奇数个点,答案上界等于答案下届,没什么优化空间,直接选定直径中点一层一层染即可
  • 考虑长度为 4 的链用于启发:发现长度为 4 的链实际上只需要两次操作
  • 如果链上点数是 4 的倍数,那么一定可以取到答案下届(反复按照长度为 4 的链构造即可)
  • 现在只剩一种情况:点数是 4 的倍数+2,发现无论如何都不能取到下届(考虑长度为 6 的链)
    答案为 n/2+1 构造方法同上,只需单独染最后两个多出来的点即可

CF1944F

简要题意

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

Solution

  • 显然先找“好数组”的充要条件。对原数组 a 差分,设 bi=aiai1。那么一次可以选择一对 (i,j) 满足 ij2,然后给 bi1,给 bj1
  • 从左往右操作。注意到我们不能操作相邻的一对元素,所以若某个时刻 bi>0b1i2 都为 0 就不合法。这就是充要条件。
  • 充要条件可以表述成 bi+j=1i2bj0,即 aiai1+ai20,注意 a0=an+1=0
  • 对于 n400 可以直接做一个 O(n3) dp,设 fi,j,k 为考虑了 [1,i] 的前缀,ai1=j,ai=k 的方案数。因为合法的 ai2 是一段后缀,所以预处理后缀和即可做到 O(1) 转移。
  • 加强版看不懂题解
posted @   yeyou26  阅读(174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示