vp 拿到了 rk5500+ 的成绩,不愧是我。
以后的总结里我认为比较有意义的题会标 ,难题标 。
C(贪心)
开始读错题了以为是序列,后来发现是个环。。假设 和 之间的长度是 ,可以发现每次取最长的最优,直接做就好了。
D
神秘题。算是对数列下标的一个观察。
考虑寻找一个不变量,而在值域上观察没有什么好的结果。考虑操作 和 的区别,发现后面下标的和是 ,前面则不变。所以假如我们把每个“1”看做球,数组位置看做盒子,假如对每个球所处的盒子编号求和那么前面和不变后面和恰好 。之后就不难做了。
E(DP)
全部都非 很好做。引入 表示 归零的时间,那么有转移 。如果有 那么就模拟一下使得所有可能非 的位置非 。这个过程最多 步,可以直接模拟。
F(博弈、SG 函数)
开始以为不能碰白格子懵逼了好久。
两边的策略显然是先抢对方的再碰自己的。如果 R,B 数量不相等就做完了。如果 RB 数量相等,那么第一个拿不到 RB 的人就输了。此时游戏变成了一个公平组合游戏,可以引入 SG 函数来处理。把形如 RBRBRBR 的子区间提取出来,那么当前局面的 SG 值就是它们的异或和。对于单个子区间,答案只和它的长度有关。引入 表示长度为 的 SG 值,它的所有后继局面是 (此处用 表示游戏的组合),DP 可以 求出 。把 打个表发现有个长度为 的循环节。这样就可以 做了。
找循环节可以善用 Ctrl+F。
G(字符串匹配、构造)
想了两天后放弃的题。
先考虑枚举起点 然后判断,如果把 和 放在一起观察,就可以发现 恰好为 。如果把相邻两项做差,可以发现它代表的就是 是否放置,这个值是在 之间的。
定义 表示 , 为 ,那么一个必要条件是 。这像极了一个字符串匹配问题,可以用 FFT 做到 或者用 bitset 做到 。
上面的考虑实际上忽略了 和 的处理。我们需要 以前操作对 操作的和为 ,并且奇偶个数差为 。这个问题相当于在 中各自选 个数使得 且差为 。可以先钦定选所有偶数,然后问题就相当于在 中选 个数使得和为 。连续非负整数中选数的一个结论是若所有能表示出来的数是连续的,那么只要求最小值和最大值即可。构造的话只需要从大往小选,如果不选会使得后面不合法就选。到这里就做完了。
一些反思:虽然考虑 和 对应的两个相关限制很精妙,但事实上如果把选与不选看做 ,那么条件相当于一个方程组。做一下消元就可以立即得到上面结论。还有这个选数问题先钦定竟然没想到,枯了。
一些补充:用 FFT 做字符串匹配的过程是把匹配的条件转化成一个代数式,并使他为 。比如这里就是 。然后条件的逻辑与相当于求和后也为 ,这可以用 FFT 求出来。用 bitset 实际上就是考虑字符 能与哪些位置匹配,然后对所有 对应的位置取交就是答案。不能直接上 KMP 的原因是真实的 border 可能比传统意义上的 border 要长,因为匹配并不一定完全相等。
H1
上面那个 G 已经消耗掉了我改 H 的欲望,所以咕了
还是来补下 H1。一开始被题目的奇怪操作折磨了好久,然后才意识到可以建图。建出图来被 干扰了好久还是不会做。。
考虑固定 计数 ,那么 对 的一个显然的限制是:。尝试在抽象的模型上讨论问题。把这个限制建个图可以发现合法的图为若干条链,并且这样的链集合和原来的 是一一对应的。那么继续考虑什么样的 能构造出链。这个问题等价于考虑链的顶端和孤立点怎么填。链的顶端是任意填的,单点不能填链尾因为我们不能通过操作 来让后面的点覆盖这个单点的操作。上面就是一个充要条件了。那么可以枚举单点和链的个数。答案为:
是单点个数, 是链的个数。意思是先把 个点分开并标号,然后把点看成球,链看成盒子塞进去。最后由于盒子是没区别的所以除个 即可。
看到这种奇怪的题多建图,多分离无关条件,还有不要看到啥都想 DP。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下