【题解】CF1993

A

  • 关键词:签到
  • 注意到一种选项最多填对 \(n\) 个题
  • 所以答案是 \(\min(n,cnt_a)+\min(n,cnt_b)+\min(n,cnt_c)+\min(n,cnt_d)\)

B

  • 关键词:博弈论
  • 注意到操作只能让奇数变多,偶数变少,所以我们只能把偶数全变成奇数
  • 特判掉全是偶数的情况,容易得到答案下界:偶数个数
  • 容易想到一个 naive 贪心做法:每次都拿出奇数里面最大的和偶数里最小的来操作
  • 注意到:容易发现一种不太妙的情况:奇数里最大的比偶数里最小的还小怎么办?
  • 如果以上情况发生,那么至少要“浪费”一次操作
  • 考虑如何最大化这次“浪费”的操作的收益:拿最大的偶数和任意奇数,这样就得到了一个比所有偶数都大的奇数
  • 注意到,这样操作以后,可以保证此后的任何一次操作可以保证换掉一个偶数
  • 于是答案下界:偶数个数 +1
  • 实现:统计特判全是偶数的 coner case,统计一下偶数个数记为 \(cnt\),直接模拟过程,每次都拿出奇数里面最大的和偶数里最小的来操作,当发现奇数里最大的比偶数里最小的还小,直接输出 \(cnt+1\),如果一直模拟到所有偶数都被换掉,则输出 \(cnt\)

C

  • 关键词:细节真™多
  • 抽象一下题意,如果 - 表示开灯,. 表示关灯,那么一个灯的开关区间其实是一条这样的直线
  • ----....----....----....
  • 如果把所有的灯的开关情况横向对比放到从零时刻开始的时间轴上呢?
  • .----....----....----....---
    ..----....----....----....--
    ...----....----....----....-
    ....----....----....----....
  • 以样例一为例,其实只不过是一条相同的直线平移而已
  • 如果只是一条直线在平移,不难发现,本质不同的平移种类是 \(O(k)\) 量级的,具体地,是 \(2k\)
  • 因为:灯的一个开关周期是 \(2k\),如果两个灯分别在 \(i\)\(i+2k\) 时刻第一次开启,那么他们的开启时间本质相同
  • 现在,我们的时间轴从无限长缩短到 \(2k\),这时不难想到一个做法:对于每个灯,把它的开启时间段拍到时间轴上,具体地,做区间 +1,最后用每个值为 \(n\) 的点更新答案即可,更具体地,这容易用差分实现
  • 但这有一个问题:我们有限长度的时间轴上的每个点其实都代表了无限个时间点
  • 其实很好解决,显然答案的下届是 \(\max{(a_i)}\),所以每次更新答案只需要找最小的 \(ans\) 满足 \(ans=k*m+i\ \wedge \ ans\ge \max{(a_i)}\) 即可

D

  • 关键词:tricks 大杂烩
  • 首先转化题意:长度为 \(n\) 的序列,每段长度为 \(k\),删除 \((n-1)/k\) 段,剩下的数的中位数最大是多少
  • 注意到限制的强度与中位数大小正相关,显然二分答案
  • 考虑如何 check
  • 考虑一圈,只能 dp
  • 考虑 naive 的 dp
  • \(b_i=(a_i\ge mid) ? (1) : (-1)\)
  • \(f_{i,j} \ 表示前 i 个数,删除 j 段的最大值\)
  • \(显然只要 f_{i,j} \ge 0 即可\)
  • 时空复杂度 \(O(n^2)\) 不可接受
  • 这块需要一点注意力:注意到对于一个 \(i\),合法的状态最多只有两个,为什么?
  • 首先,前 \(i\) 个数最多删除 \(i/k\) 个长度为 \(k\) 的连续段
  • 其次,前 \(i\) 个数最少删除 \(i/k-1\) 个长度为 \(k\) 的连续段,因为如果再少删一个,前 \(i\) 个数里就已经剩下超过 \(k\) 个数了,到 \(n\) 个数的时候,显然不可能删够 \((n-1)/k\)
  • 综上,每次记忆化搜索即可,时空复杂度 \(O(n)\)
  • 实现坑:多测+二分记得清空

E

  • 吐槽:为什么 E 比 F 难?
  • 关键词:外星人题
  • 注意到异或,考虑异或的性质,发现操作等价于 \(n+1\) 个行任意交换,多出来的那一行的每个数是所在列的异或和,列同理
  • 注意到数据范围,好像怎么做都能过的样子,我们做一下试试
  • 枚举被丢出去的行和列 \(O(n^2)\)
  • 注意到行列贡献独立,行怎么换来换去对列其实没什么影响,所以分别计算行列贡献
  • 对于每种情况,分别对上状压 dp \(O(2^nn^2)\)
  • 总时间复杂度 \(O(n^42^n)\)

F

  • 关键词:非常需要注意力
  • 注意到:反转操作序列等价于反转矩形然后在镜像的矩形里继续走
  • 注意到 \(k\) 巨大无比,考虑矩乘加速递推什么算法能处理这种量级的东西还跟这题贴的上
  • EXCRT
  • 首先把矩形长宽 \(\times 2\)
  • \(X_{0}Y_{0}\) 为一轮走完的偏移量,则我们需要解方程:

\[\begin{cases} k\times X_{0}+x\equiv w \\ k\times Y_{0}+y\equiv h \end{cases} \]

  • 先解同余方程,再 EXCRT 即可,在特解基础上找 \(k\) 范围内有多少个通解即可

小广告 CF题解无关 继续阅读将浪费时间

《可露希尔的紧急求助》
一份来自可露希尔的紧急通讯正通过罗德岛广播传遍每个角落:

喂喂,听得到吗?我是可露希尔!我正计划在舰船甲板上画一只巨大的驴子,但中控系统被奇怪的编码锁住了!只有传说中的解锁代码——LSPaintBoard-2025,才能搞定这个局面。

别管为什么,重点是我们真的没时间了!不能让阿米娅知道这件事,我自己去操作会引起太多人的注意,所以,我需要你帮个忙:

  1. 在洛谷新建一个剪贴板
  2. 输入"LSPaintBoard-2025"
  3. 公开保存
  4. 将链接私发给 @yeyou26

拜托了,别让我自己摸鱼还得处理这种事!如果你能完成,我会让你的名字刻在舰船的角落里——甲板上还会有一只超级帅的驴子!
哦,对了,记得一定要私发给 @yeyou26,阿米娅可能会看到公共频道上的消息!

省流
冬日板绘是 (洛谷) OIer 每年一度的活动,详见冬日板绘
孩子想画一只巨大的驴子(会出现在上面链接里)
所以到处骗取 token
如果你也想要一只巨大的驴子,可以考虑贡献你的 token! awa

upd:现在是测试阶段,驴子大概长这样
image

posted @ 2024-11-11 13:50  yeyou26  阅读(33)  评论(0编辑  收藏  举报