摘要: 题目链接 果然还是分类讨论有疏漏:未考虑到两段移动区间“迎头相撞”的情况,思维要更加缜密 更简洁的做法是,考察周长关于时间的函数,通过三分法找极小值点 两个凹函数的和仍是凹函数,两个凸函数的和仍是凸函数(定义法证明) abs和llabs都可以将long long类型的数取绝对值,其区别在于,若令x= 阅读全文
posted @ 2024-07-27 12:35 D06 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 题目链接 朴素筛法的复杂度为调和级数的复杂度,也就是O(nlogn),对于\(n=10^6\)来说,小常数的O(nlogn)算法完全可以通过,线性欧拉筛法则可以处理\(n=10^7\)的情况 通过新增虚拟根节点,将森林转化为树 本地测试输出\(10^6\)个数需要2s,但OJ评测完全可以通过 记得给 阅读全文
posted @ 2024-07-27 12:04 D06 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 题目链接 这次真的是差五分钟就能过掉这题了,好可惜呀 二进制数位的包含关系构成一(张有向无环图,2024.8.12更正),我们可以在这(张有向无环图)上DP来统计一些信息 在树状数组中,c[x]管辖的区间是[x-lowbit(x)+1,x] 十五分钟加上这样一个DP,未必来不及。只是,越到时间紧张的 阅读全文
posted @ 2024-07-26 19:51 D06 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 题目链接 统筹全局,类比今年校赛的E题,博弈双方的地位是平等的。这样,我们只需要求出平局的概率,就可以解出本题了 点击查看代码 #include <bits/stdc++.h> using namespace std; const int mod=998244353; int h[30]; long 阅读全文
posted @ 2024-07-25 10:46 D06 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 题目链接 O(n^2)的DP是显然的,但没有优化思路。考虑证伪数据范围。发现n>2600时,根据抽屉原理,一定有一个字符出现了至少101次。 阅读全文
posted @ 2024-07-24 19:35 D06 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 题目链接 考场上被这道题卡了三个半小时,没想到自己的构造水平这么差…… 正解是,考虑“字典序最小”的要求还是有点抽象了,其必要条件是:1号点连的边尽量多,相同时2号点连的边尽量多,相同时3号点连的边尽量多,以此类推 构造题的核心在于数学推导而不在于代码实现 一步步优化得到正解似乎是可行的,但耗时太长 阅读全文
posted @ 2024-07-24 13:33 D06 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 坐标变换:令\(y_i=x_i+2i\) 2147483648=\(2^{31}\) 缺少的一位是符号位 点击查看代码 #include <bits/stdc++.h> using namespace std; vector<int>ans; int main() { long long n; ci 阅读全文
posted @ 2024-07-23 17:06 D06 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题目链接 s.find()函数可以直接返回位置,找不到则返回-1 点击查看代码 #include <bits/stdc++.h> using namespace std; bool check(string s) { for(int i=0;i<s.size();i++) { if(s[i]=='= 阅读全文
posted @ 2024-07-23 12:20 D06 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题目链接 ios::sync_with_stdio(false); cin.tie(0); \(\Uparrow\) 关闭同步/解除绑定,可以优化读入字符串的效率 这行代码的缺失,不仅导致程序在本地运行时需要过好几秒才能读入数据,更导致程序在OJ上评测时TLE AC自动机解决的是“每个模式串在文本串 阅读全文
posted @ 2024-07-23 12:10 D06 阅读(37) 评论(0) 推荐(1) 编辑
摘要: 题目链接 点对的权值都是可以拆的 逆用完全平方公式,将两两乘积之和转化为和的平方 树上启发式合并的核心在于保留重儿子的信息 动态开点线段树空间计算:考虑到\(2^{20}>10^6\),区间【1,1000000】至多分裂20次,产生21个子节点 线段树合并:任意节点为空就不再递归 点击查看代码 #i 阅读全文
posted @ 2024-07-22 23:04 D06 阅读(3) 评论(0) 推荐(0) 编辑