Codeforces Round 963 (Div. 2) 题解
Codeforces Round 963 (Div. 2)
A
对 A, B, C, D
的数量和 取个 相加
B
只有奇数或只有偶数答案为 ,否则,只能把所有的偶数改为奇数,因为不可能把所有奇数改为偶数。
然后就是改的大小问题了。考虑找到最大的奇数,然后把偶数从小到大依次修改。
C
显然对 考虑同余就好了,因为循环节长度是 的。
然后变成一个长度为 的数轴,求若干个区间的交集。
分成两种区间,一种是包左右两头的,一种是包中间的。
由于这两种区间的交集最多只会有两个区间,直接维护这两个区间就好了。
D
直接 dp,设 f[i][j]
表示考虑前 个数,保留 的数,最少保留几个,显然 f[n][j] = (n + 1) / 2
的最大 就是答案了。不难注意到这个东西第二维是单调的,考虑二分这个 ,然后去 dp。
E
假设只考虑对一列 进行修改的操作,可以发现相当于把 覆盖掉第 列。覆盖之后,新的 居然就是原来的第 列。
这不是相当于,把 看作第 列,然后交换第 和第 列么。
不过 被改变了,这个操作不能这么单纯地被描述。但是一看就会发现 变成了所有数的异或和,于是不难想到,定义第 行和第 列, 就是所有数的异或和,,于是操作变成交换第 行和第 行或交换第 列和第 列。
推广一下,其实就是交换任意两行和任意两列,然后让差值和最小。
那就是给行决定一个排列,列决定一个排列,然后让差值和最小。这时候行、列是独立的。
当题意能简化成简单的一句话时,说明我们建立的模型很对啊!
显然可以求出第 行和第 行的差值,把这个看作边权,变成找到一个最短哈密顿路径。
这个问题我没那么熟悉,思考一下直接状压就能 做完?
F
略微彰显智慧了,反射这个确实应该想到。
如果机器人不遵守边界限制,那么当其在坐标 且满足 是 的倍数, 是 的倍数时,机器人回到了原点。
于是变成给你操作序列,统计何时满足上面的条件。
如果是 F1 的话,可以求出每次循环分别会遍历 几次( 分别取模),然后对 次循环直接统计即可。
设第 次移动到了 ,变成枚举 ,。
反过来,考虑 ,然后就结束了?好像也不难?细节就是考验数论功底了。
本文来自博客园,作者:lingfunny,转载请注明原文链接:https://www.cnblogs.com/lingfunny/p/18344717
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效