摘要:
用线段树维护原序列对应的差分数组,可以把区间修改简化为单点修改 点击查看代码 #include <bits/stdc++.h> using namespace std; int a[100005],n; int read1() { char cc=getchar(); while(!(cc>=48& 阅读全文
摘要:
果然还是分类讨论有疏漏:未考虑到两段移动区间“迎头相撞”的情况,思维要更加缜密 更简洁的做法是,考察周长关于时间的函数,通过三分法找极小值点 两个凹函数的和仍是凹函数,两个凸函数的和仍是凸函数(定义法证明) abs和llabs都可以将long long类型的数取绝对值,其区别在于,若令x=-2147 阅读全文
摘要:
朴素筛法的复杂度为调和级数的复杂度,也就是O(nlogn),对于\(n=10^6\)来说,小常数的O(nlogn)算法完全可以通过,线性欧拉筛法则可以处理\(n=10^7\)的情况 通过新增虚拟根节点,将森林转化为树 本地测试输出\(10^6\)个数需要2s,但OJ评测完全可以通过 记得给f[n+1 阅读全文
摘要:
这次真的是差五分钟就能过掉这题了,好可惜呀 二进制数位的包含关系构成一(张有向无环图,2024.8.12更正),我们可以在这(张有向无环图)上DP来统计一些信息 在树状数组中,c[x]管辖的区间是[x-lowbit(x)+1,x] 十五分钟加上这样一个DP,未必来不及。只是,越到时间紧张的关头,越要 阅读全文
摘要:
统筹全局,类比今年校赛的E题,博弈双方的地位是平等的。这样,我们只需要求出平局的概率,就可以解出本题了 点击查看代码 #include <bits/stdc++.h> using namespace std; const int mod=998244353; int h[30]; long long 阅读全文
摘要:
O(n^2)的DP是显然的,但没有优化思路。考虑证伪数据范围。发现n>2600时,根据抽屉原理,一定有一个字符出现了至少101次。 点击查看代码 #include <bits/stdc++.h> using namespace std; int f[3005][3005]; int g[3005][ 阅读全文
摘要:
考场上被这道题卡了三个半小时,没想到自己的构造水平这么差…… 正解是,字典序最小的必要条件是1号点连的边尽量多,相同时2号点连的边尽量多,相同时3号点连的边尽量多,以此类推 构造题的核心在于数学推导而不在于代码实现 一步步优化得到正解似乎是可行的,但耗时太长;这次你推导3个多小时,迭代到第八个版本才 阅读全文
摘要:
坐标变换:令\(y_i=x_i+2i\) 2147483648=\(2^{31}\) 缺少的一位是符号位 点击查看代码 #include <bits/stdc++.h> using namespace std; vector<int>ans; int main() { long long n; ci 阅读全文
摘要:
s.find()函数可以直接返回位置 点击查看代码 #include <bits/stdc++.h> using namespace std; bool check(string s) { for(int i=0;i<s.size();i++) { if(s[i]=='=') { return tr 阅读全文
摘要:
ios::sync_with_stdio(false); cin.tie(0); \(\Uparrow\) 关闭同步/解除绑定,可以优化读入字符串的效率 这行代码的缺失,不仅导致程序在本地运行时需要过好几秒才能读入数据,更导致程序在OJ上评测时TLE 时隔半年,自己还能独自完成KMP和AC自动机的代 阅读全文