CF1557总结
CF1557总结
Codeforces Round #737 (Div. 2)
先看了 A 。意思是要把序列分成两个子序列,使得两序列各自平均值的和最小,输出最小值,要求 \(O(n)\) 。想半天然后猜结论,搞了十来分钟结果发现好像可以直接拿最大的分一组。其他的分一组,然后几分钟打完发现是对的。
然后看B,是问把序列断成 \(k\) 块,再重拼能不能给他排好序。看到 \(T \le 10^3\) ,\(N \le 10^5\) ,以为是 \(O(n)\) ,但我只会离散化然后统计有几个地方要断开,而离散化是带 \(log\) 的。于是放下 B 看了 C 。
C 很有意思,是一道数论题。问有多少构造正整数集合 \(S\) 方案可以使得其与和大于等于异或和。题目中对 \(S\) 的限制还有:必须包含 \(n\) 个元素,且每个元素都要小于 \(2^k\) 。显然,最后一个限制是说元素二进制下为 \(k\) 位。那我们套路地考虑从大向小的一个比较过程,因为位运算中每一位是独立的,而且如果前面的位有了区别,那后面的位是没有贡献的。考虑从当前位开始比较,那么当有奇数个 \(1\) 且不是所有数都是 \(1\) 时,对答案没有贡献(异或和比较大)。当有偶数个 \(1\) 而且也不是全 \(1\) 时,还是分不出大小,所以这些情况需要留到下一位去解决。有奇数个 \(1\) 而且全都是 \(1\) 时,也是不分大小。而当有偶数个 \(1\) 且全部是 \(1\) 时,已经可以对答案进行贡献了。然后把每种的当前位方案数,得到的贡献算一下,然后递归或者递推一下就行了。
这时候回到 B ,发现数据范围其实是 \(\sum n \le 3 \times 10^5\) ,那就用前面提到的 \(O(n\log n)\) 离散化做法即可。
然后来看D,就是问,给定一个长度为 \(n\) 的有序序列,每个元素是一个区间集合,最少删去多少个,使得剩下的序列中,每两个相邻的区间集合都相连,相邻两个区间集合连在一起定义为 \(S_1\) 中某个区间与 \(S_2\) 中某区间有交集。总区间数为 \(m\) 。复杂度要求是 \(O(n\log n)\) 级别。我乱想半天,什么鬼都没想到,就想到均摊 \(O(nm)\) 的能否连的预处理。估计着也写不出来了,于是弃疗,口胡起来。结果口胡一个 DP ,三维。乱想两下,发现可以变成一维。即设 \(dp_i\) 表示已经处理前 \(i\) 个区间集合,且最后一个保留的区间集合是 \(i\) 时,最小的删除数。然后考虑转移时 \(dp_i = \min \{ dp_j +(i-j-1)|j\text{与}i\text{相连}\}\) 这时候如何做到 \(O(\log n)\) 转移。显然要离散化,然后我最开始想到要把 \(j\) 用挂表法挂在塔包含的区间中,然后就可以访问到每一个可能转移的 \(j\) 。继续优化,考虑转化方程,提出 \(i\) 来,就是\(dp_i = \min \{ dp_j -j|j\text{与}i\text{相连}\}+i-1\) 这样,我们就不需要挂表了,直接考虑在这个区间的最小值更新一下。想到这里,显然可以直接线段树维护一下。至于复杂度,总的区间数是 \(m\) 个,离散化后要 \(4m\) 个位置,所以复杂度实际上是 \(O(n+m\log(4m))=O(m\log m)\)。可惜的是,到最后结束5分钟才写出来,而且懒得再维护方案了(光是求答案就花了25分钟)。结束后,PCQ 说这个题很套路,反正我是没见过这类的套路,不过我的思路确实绕了个大圈子才想到正解。
E 也蛮有意思,是个国际象棋交互,你控制后,对面有只王。你不知道王的位置,但知道你每走一步后王往哪个方向走了。要求你在 \(130\) 步内让王无路可走。CZA 说有点感觉了,和吟唱的金色花海有点像。
CF1557总结的更多相关文章
随机推荐
- CSP202104-4校门外的树
`#include include include include include include include include include include include include us ...
- vue整体回顾
vue大回顾 1 前端发展史 react vue---> 前端工程化---> 前后端分离 大前端:flutter uni-app 2 Vue介绍 单页面应用(spa) 组件化开发 mvvm ...
- Camstar报错:cannot be accessed through null object reference at CDO 'xxx'
- linux下进程和线程的区别和联系
进程用fork()或者vfork()生成(vfork是专门为了加载其他程序的子程序而优化的,随着fork()的优化,vfork已经被优化) fork()生成的子进程与父进程共享代码区内存,对于其他内存 ...
- java写 变量到文件
import java.io.BufferedReader; import java.io.File;import java.io.FileReader; import java.io.IOExcep ...
- word文件打开报错:abnormal program termination
部分word文件打开后报错 处理方法 1.更改默认打印机 2.调整开机启动项 取消该项:cyberkI guard service的开机自启动 (赛博昆仑安全软件) 3.调整word的COM加载项
- vue2 element-ui组件二封-表单组件-按钮封装
这里是一段我们公司过往项目的代码(增删改查项目中的查询/重置按钮) <el-button @click="query()" type="primary" ...
- pip3 install
python3 -m venv tutorial-env source tutorial-env/bin/activatepip3 install *deactivate
- js 浮点数加、减、乘、除。
1.浮点数加法运算 function numAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split("." ...
- mac os 11 Big Sur 根目录无法写入解决办法
本文目的是解决无法在 / 目录下创建目录的问题: 关闭SIP 重启机器,按住 command + R 选择 磁盘工具 在导航栏 窗口 中打开 终端 ,执行如下命令: csrutil status ## ...