摘要:
CF1523 A: 分析题意后,可以得到4种情况 字符串位置本来就是1,不变 本身是0,但两边1的距离相等,不变成1. 本身是0,左右两边1距离小于操作次数,就输出1。 其余情况都为0 这样我们就可以前缀和后缀进行计算,同时处理边界情况,就可以解决问题了。 #include<bits/stdc++. 阅读全文
摘要:
CF1537 A: 三种情况: 直接相等. 小于长度,输出1. 大于长度,补充0. #include<bits/stdc++.h> using namespace std; int T,n,b; int main(){ cin>>T; while(T--){ cin>>n; int ans=0,su 阅读全文
摘要:
CF1539 A: 分为两种情况: 相同数目。 递减的数目。 第一种情况,每次能有 \(\lfloor \frac{t}{x} \rfloor\) 个,第二段就是等差数列,直接每次 \(-1\) 加和就行。 直接计算即可。 #include<bits/stdc++.h> using namespac 阅读全文
摘要:
CF1555 A: 推公式题,每一个都是 \(2.5\) 的时间,那么我们尽量用 \(10\) 。 如果是偶数,那么直接可以凑出来,如果是奇数,就 \(+1\) 变成偶数来凑,再考虑特殊情况即可。 #include<bits/stdc++.h> using namespace std; #defin 阅读全文
摘要:
整除分块 可以用到整除分块的形式,大致是这样的: $$\sum_{i=1}^n \lfloor\frac{n}{i}\rfloor $$ 这种式子因为特殊的要求,通常是要求 \(O(\sqrt{n})\) 的复杂度去算。 对于每一个 \(\lfloor\frac{n}{i}\rfloor\) 我们可 阅读全文
摘要:
CF1542 A: 直接判断有多少奇数,如果有奇数个奇数,就不行。 #include<bits/stdc++.h> using namespace std; int T,n,cnt; int main() { cin>>T; while(T--){ cin>>n; cnt=0; for(int i= 阅读全文
摘要:
CF1547 A: 三点在同一条线上,且障碍点在中间,就需要 \(+2\) 直接曼哈顿距离即可。 #include<bits/stdc++.h> using namespace std; int ax,ay,bx,by,fx,fy; bool flag; int main(){ int t; cin 阅读全文
摘要:
Boruvka算法求最小生成树 算法的核心思想是贪心,类似于 \(kruskal\) 算法过程: 维护途中所有联通块,然后遍历所有点和边。 找到每一个联通块和其他联通块相连的最小的一条边。 把连通块合并起来,重复操作,直到剩下一整个连通块。 复杂度分析: 复杂度是 \(O((m+n)log n)\) 阅读全文
摘要:
CodeForce 1550 A 考虑最少,我们可以将序列数字设为: \(1,3,5,7,9....\) 进行前缀和计算,找到 \(S\) 匹配到的区间值,其最少的数的个数即为对应大前缀和的下标。(这是一种时间复杂度更优的算法) #include<bits/stdc++.h> using names 阅读全文
摘要:
线性筛 线性筛可以在严格 \(O(n)\) 的时间内筛出积性函数的值 拥有常见的套路。 假设 \(n = p_1^{a_1} p_2^{a_2} \dots p_k^{a_k}\) 如果我们能快速得到 \(f(p_i),f(p_i^{k+1})\) 的取值,那么直接套板子即可。 定义: \(p_i\ 阅读全文