EZOJ 刷题笔记(1)
EZOJ65 A
AC code
当 时强制让 与 交换,这样交换显然是对的并且是最优的。
注意当 时也要这么做因为你可以找到一个 与 交换。
时间复杂度为 。
EZOJ20 ymh喜欢函数
AC code
二分神题,最优选择的答案一定是一个下凸函数,所以先特判掉 的情况是否可行,然后再二分求 即可。
若 时答案小于 ,则函数单调下降的部分小于 ,二分的区间一定会缩小到函数单调上升的部分,故二分是正确的。
注意出题人卡了 做法,找前 大时不能用 sort 要用 nth_element,注意 可能会爆 long long。
这道题实际上数据保证了 在 范围内必定有解但是并没有说……
时间复杂度为 。
EZOJ22 ymh的序列
咕咕咕~
EZOJ45 SKY_magician的完全图
AC code
设 表示 个点的完全图划分成 个连通块的方案数, 表示 个点的完全图删若干条边的方案数,则有:
上述状态转移方程并不难理解,提示:为防止重复计算方案,选取一个关键点,并选择其他一些点连向该关键点构成一个连通块。
最终的答案即为 ,注意到题目要求至少删一条边,所以 时要将一条边都不删的情况给减去。
时间复杂度为 。
EZOJ50 SKY_magician的集合
AC code1
AC code2
注意到 最大才只有 也就是说枚举因子 是能过的。
设集合中有 个数是 的倍数,则答案很显然是 。
因为只要存在一个不满足该条件的 ,则 就可能成为某几对数的最大公因数, 就一点都不可能了。
AC code1 是我一开始写比较暴力的 ,但是由于 和 比较小就冲过去了。
AC code2 是此题的正解,时间复杂度为 。
EZOJ127 SKY_magician的qwq
AC code1
AC code2
把 w 看成 ,把 q 看成 ,问题等价于求长度为 的 01 序列满足任意两个 中间至少有 个 的个数。
这个问题就很简单了,可以考虑 DP 也可以考虑组合数去计算。
设 表示考虑前 位且第 位是 的合法 01 序列方案数,则有:
上面的那个 显然可以记录前缀和来优化掉,AC code1 是这种做法,时间复杂度为 。
或者我们也可以把它看成组合数问题,至少有 个 在两个 中间,那么就可以把这些 都删去。
所以我们可以枚举有 个 ,原问题就相当于在 个位置里面放 个 的方案数,即为:
,其中 表示 的上界(由 推导得到)。
注意模数 是个质数,可提前预处理出阶乘及其逆元,AC code2 是这种做法,时间复杂度为 。
EZOJ51 黎曼函数
AC code
按照题意模拟,预处理出 的 阶导函数即可。
注意模数是 不是 。
时间复杂度为 。
EZOJ52 树状数组套splay
AC code1
AC code2
离线做法很简单,将边权和询问都从大到小排序后,向图中不断加边,用并查集维护当前图中的连通块数即可。
如果强制在线呢?也不难想到选择边权尽量大的边答案一定不劣,所以直接 kruskal 找出最大生成树,保证能让最小的边的边权尽量大,然后对于每次询问二分出最多能用多少条边即可。
注意题目中没有保证图连通,这里所说的最大生成树不一定是连通的,所以设二分出能用 条边,答案应为 ,与最大生成树的边数无关,然而 std 的柿子与边数有关便挂了,这里给出一组 hack 数据:
4 2 1
1 2 1
2 3 2
1
答案应该是 ,输出 的是错的。
但是我发现出题人造的数据都是一棵树,所以也有可能数据保证图连通但是出题人没有写在题面上?
数据范围说好的 ,不知道为啥出题人造的数据 最大才 ,导致在线做法跑得要比离线的快一些。
AC code1 是离线算法,时间复杂度为 。
AC code2 是在线算法,时间复杂度为 。
EZOJ53 SG函数
AC code
首先 显然比 要大,所以我们可以维护一个堆,每次贪心选最大的组合数。
现在难点在于如何比较两个组合数的真实大小,由于数字巨大没法存储真实数字,取模意义下显然也不对,所以可以考虑取对数:
而 ,所以我们存储 函数的前缀和即可,膜意义下的组合数可以提前预处理出阶乘及其逆元。
注意 要用浮点数存,需要 cmath 库里面的 函数。
虽然我用 pb_ds 的配对堆,ext/pb_ds/priority_queue.hpp 库包含了 cmath 库,但是还是建议用 函数就开 cmath 库。
时间复杂度为 。
EZOJ57 主席树优化最小割
AC code
一开始打表发现了答案是斐波那契数列,直接矩阵快速幂求解即可,现在来证明一下:
即为 ,而 也成立,显然只有当 不进位时两个柿子才同时成立。
考虑到 就是 ,所以 进位当且仅当 在二进制表示下有相邻的 。
于是就可以设 表示没有相邻的 且最后一位是 的 位二进制数,则有:
然后我们把第二个柿子变成 并将其带入到第一个柿子中,省略掉第二维,可以得到:。
这也就是斐波那契数列的柿子,证毕。
时间复杂度为 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!