每日一题
crazycarryai
这个作者很懒,什么都没留下…
展开
-
代码源div2 每日一题 思维+前缀和 OR dp
非递减的01序列思路1:经过操作最后的序列一定是一段全为0的序列加上一段全为1的序列,所以可以枚举分界点,利用前缀和计算需要更改的数量#include<iostream>using namespace std;const int N=1e6+5;int n,pre[N],ans=0x3f3f3f3f;char c[N];int main(){ cin>>n; getchar(); cin>>c; for(int...原创 2022-05-11 11:31:08 · 109 阅读 · 0 评论 -
代码源div2 每日一题 差分+前缀和
简单差分先做差分,再做前缀和,没什么可以说的#include<iostream>using namespace std;const int N=2e5+5;int n,m,k;long long a[N],b[N],c[N];int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); b[i]=a[i].原创 2022-05-10 13:24:07 · 95 阅读 · 0 评论 -
代码源div2 每日一题 gcd+数学
数学http://oj.daimayuan.top/course/11/problem/47这组数和sum为,设两组和分别为sum1,sum2求两组数字的和的公约数最大sum1和sum2的共同约数也是sum的约数设x在中,那么一定有一组为,另外一组为,这时最大公约数为,即枚举最小的x这里可以分情况讨论,当两组没有共同约数时,最大公约数为1,当两组有共同约数时,便是上面这种情况...原创 2022-05-09 13:37:05 · 98 阅读 · 0 评论 -
代码源div2 每日一题 思维+前缀和
三段式将序列分成三段,每段和相等,不难发现,和其实就是总和/3记总和为sum由此我们可以利用前缀和计算序列和,找到和为sum/3和sum*2/3的点并记录下来如果sum*2/3的点的下标大于sum/3的点的下标,那么就是组合法解需要注意当所有元素为0的情况,这时的时间复杂度为,直接利用小学二年级学过的求和公式求和即可#include<iostream>#include<vector>using namespace std;const int N原创 2022-05-08 15:57:34 · 121 阅读 · 0 评论 -
代码源div2 每日一题 dp
树删除一个节点和它儿子之间的所有边,实际产生了它的出度数+1个联通块所以求是否能产生k个联通块,就是将所有入度统计到一个数组中,查找数组中是否能找到某些数相加等于k,实际就是01背包当然整个树就是一个联通块#include<iostream>using namespace std;const int N=3005;int n,tree[N],dp[N*N];int main(){ cin>>n; int x; for(int i=1;i&原创 2022-05-07 12:06:44 · 362 阅读 · 0 评论 -
代码源div2 每日一题 gcd+数学
添加括号a1只能是分子,a2只能是分母,后面所有的数可以通过添加括号,使其变成分子,所以求所有数与a2的最大公约数,如果能将a2约分成1,那么便能变成整数,如果不能,则一定有a2的某个因子做分母#include<iostream>using namespace std;const int N=1e4+5;int t,n,a[N];int gcd(int x,int y){ if(y==0) return x; else return gcd(y,x%y).原创 2022-05-06 20:33:33 · 173 阅读 · 0 评论 -
代码源div2 每日一题 dijkstra
Collision把该图类比成树,转化成求两个节点在树的第几层,根节点随意取,这里取1为根节点,将两个节点的层数相加看奇偶,是偶数则能在村镇相遇,否则只能在路上相遇用邻接表存图,因为无向图,需开到2e5的大小,稀疏图跑堆优化的djikstra其实bfs也可以做此题#include<iostream>#include<cstring>#include<queue>using namespace std;const int N=2e5+5;原创 2022-05-05 23:20:23 · 119 阅读 · 0 评论 -
代码源div2 每日一题 思维+前缀和+map
简单子段和题目要求连续一段子数组和为k,用前缀和可得区间和枚举左右边界时间复杂度为,数据大小为2e5,时间复杂度还需优化通过map将当前区间和记录,转而求map中存在值等于sum-k需注意前缀和r-l(l可能为0)#include<iostream>#include<map>using namespace std;const int N=2e5+5; long long n,k,num[N];map<long long,long lon原创 2022-05-03 21:55:31 · 356 阅读 · 0 评论 -
代码源div2 每日一题 思维+放缩
分数拆分y<=x1/x<=1/y1/k-1/y<=1/yy<=2k枚举y从k+1到2*k#include<iostream>using namespace std;int main(){ long long k,i,ans=0; cin>>k; for(i=k+1; i<=2*k; i++) { if((k*i)%(i-k)==0) { ans++; }原创 2022-05-02 15:32:25 · 267 阅读 · 0 评论