CodeForces
fxt275307894a
这个作者很懒,什么都没留下…
展开
-
CF1438D Powerful Ksenia
题面传送门这个构造还是很巧妙的。有一个显然的性质:序列中所有数的异或和等于最后只有一种数时所有数的异或和。还有一个结论:当有三个数a,b,ba,b,ba,b,b时,只要一次操作就能使其变成三个aaa。那么事实上无解的情况已经呼之欲出了:当n mod 2=1n\bmod 2=1nmod2=1且序列中的所有数异或和不为000即无解。现在主要是三步:处理出所有数得异或和,令其为ana_nan,将剩余n−1n-1n−1个数两两相等。再用n2\frac{n}{2}2n次操作将其变为一样。对于nnn为奇原创 2020-11-15 12:51:10 · 281 阅读 · 0 评论 -
CF431E Chemistry Experiment
题面传送门题解里居然没有写线段树上二分的,来交一发。维护一颗权值线段树,以hih_ihi为下标,主要维护两个值,是元素个数和元素和。那么当前点mmm可以判断左边的节点数×m−\times m-×m−左边的元素和是否大于当前的水量来考虑走左边还是右边。走到最后一个节点时计算剩下的水量,然后均摊给每一个试管。时间复杂度O(nloga)O(nloga)O(nloga),一点不卡常。代码实现:#include<cstdio>#define l(x) f[x].l#define r(x)原创 2020-11-03 20:04:03 · 292 阅读 · 0 评论 -
CF1444B Divide and Sum
题面传送门考虑一个最朴素的暴力:枚举两个数,再用组合数算答案。考虑算贡献。先排好序。一个数有两个贡献,加的贡献和减的贡献。可以枚举每一个数,钦定这个数一定是降序排序的,结果乘二,然后枚举在这个数之前选几个。代码大概长这样:sort(a+1,a+2*n+1);for(int i=1;i<=2*n;i++){ for(int j=1;j<=min(i,n);j++){ if(i-j-1<=n-j-1) ans-=a[i]*c(j,i)*c(n-j-1,n-i); els原创 2020-11-02 15:10:37 · 143 阅读 · 0 评论 -
CF1444A Division
题面传送门题意简述:给出aaa与bbb,找到一个最大的数xxx,使得a%x==0&&x%b≠0a\%x==0\&\&x\%b≠0a%x==0&&x%b=0这样的题目考虑质因数分解。因为bbb分解是在可以接受的范围内,所以分解bbb。设b=a1p1×a2p2×...×anpnb=a_1^{p_1}\times a_2^{p_2}\times...\times a_n^{p_n}b=a1p1×a2p2×...×anpn然后将aaa分解得a原创 2020-11-02 15:09:15 · 422 阅读 · 0 评论 -
CF342E Xenia and Tree
题面传送门看完了题目你会发现这道题居然没有撤销操作。那么基本上就是某些奇奇怪怪的算法首先我们考虑暴力第一种想法是暴力对于每个红点求lcalcalca第二种想法是对于每个新加进来的红点做一遍bfsbfsbfs然后每次查询直接O(1)O(1)O(1)一般这种有两个暴力然后分别两个操作复杂度大大低于另外一个的就是根号分治。考虑对操作分块,设块长为KKK那么对于每一块的查询,对这一块中的修改取lca然后再和之前bfsbfsbfs的取minminmin,每一块结束后进行bfsbfsbfs,注意这样bf原创 2020-10-30 22:08:35 · 133 阅读 · 0 评论 -
CF1436E Complicated Computations
题面传送门首先考虑一个结论:将一个区间中的数去重后这个区间mexmexmex没有影响。所以我们只要求出那些mexmexmex中有几个数。一个区间mex=kmex=kmex=k的条件是区间没有kkk且区间有111到k−1k-1k−1考虑对于同样的数分段。那么对于每个段这样查询即可。即满足三个条件:[l≤i≤r][l\leq i \leq r][l≤i≤r]和所有不同的1−k−11-k-11−k−1种类等于k−1k-1k−1如果直接像HH的项链HH的项链HH的项链那样那就要二维树状数组维护要两个l原创 2020-10-25 15:57:07 · 621 阅读 · 0 评论 -
CF1408F Two Different
题面传送门一道好题。首先有一个操作:如果有nnn个aaa,nnn个bbb,那么可以通过nnn次变成2n2n2n个ccc那么考虑倍增,每次选取两块拿来合并。然后对于前一部分和后一部分分别倍增就好了。代码实现:#include<cstdio>using namespace std;int n,m,k,z,a[100039],s,head,x[1000039],y[1000039];int main(){// freopen("1.in","r",stdin); register原创 2020-10-07 21:58:56 · 1152 阅读 · 0 评论 -
CF1423B Valuable Paper
题面传送门场切的题目,感觉还是很套路的。这种最大最小一看就是二分没跑了。考虑二分分出来后怎么验证。题面已经很明显地提示了我们这是一张二分图。那么跑网络流的二分图最大匹配就好了。时间复杂度O(nmlogai)O(n\sqrt mloga_i)O(nmlogai)代码实现:#include<bits/stdc++.h>using namespace std;int n,m,k,x[100039],y[100039],z[100039],d[100039],cur,l,r,mi原创 2020-10-06 10:28:59 · 338 阅读 · 0 评论 -
CF1423K Lonely Numbers
题面传送门场切的题目,感觉不错。首先有一个结论:一个质数xxx,只有出现x2x^2x2是他才不孤独。证明:对于不是xxx的倍数yyy,那么三个值分别为1,x,y1,x,y1,x,y,这样一定无法构成三角形。对于是xxx的倍数kx(k≠x)kx(k≠x)kx(k=x),那么三个值分别为1,x,k1,x,k1,x,k也构不成三角形。第二个结论:合数一定是不孤独的。证明:如果这个合数是某个质数的平方。那么同上。如果不是,因为合数xxx至少有一个小于x\sqrt xx的因数yyy,则yz=x原创 2020-10-06 09:38:09 · 402 阅读 · 0 评论 -
CF1055F Tree and XOR
题面传送门这道题卡空间卡到了丧心病狂的程度。两点间路径可以转化为前缀异或值。对于一般的这样的题目,我们可以直接在一棵trietrietrie上分治,每次选更大的一边,时空复杂度都是O(nlogw)O(nlogw)O(nlogw)但是这道题卡空间,所以只能用滚动trietrietrie何为滚动trietrietrie?可以发现,这道题在某种意义上只有一次查询,即只遍历一遍这颗trietrietrie,所以我们只要保存上一层的节点即可。代码实现:#include<cstdio>#i原创 2020-08-27 21:56:31 · 150 阅读 · 0 评论 -
CF1371D Grid-00100
题面传送门很好的一道构造题。显然答案就是000或者222因为不存在两行或两列差值大于111的。那么沿着对角线依次左移即可,用一个循环队列实现。代码实现:#include<cstdio>#include<cstring>using namespace std;int n,m,k,x,y,t,f[339][339],a[339];int main(){ register int i,j; scanf("%d",&t); while(t--){ mem原创 2020-07-04 22:14:43 · 171 阅读 · 0 评论 -
CF1371C A Cookie for You
题面传送门把第一类客人转换一下,就是哪个多吃哪个。第二类客人就是哪个少吃哪个。很容易发现第二类客人最多能满足min(a,b)min(a,b)min(a,b)个,那么剩下的看第一类客人能否满足即可。代码实现:#include<cstdio>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))using namespace std;long long n,m,k,x,y,t,ans1,a原创 2020-07-04 22:12:35 · 242 阅读 · 0 评论 -
CF1371B Magical Calendar
题面传送门又是一道分类讨论的题目。如果r>nr>nr>n,那么其实k=rk=rk=r与k>rk>rk>r的任何值是一样的,所以可以忽略。而k=rk=rk=r又只有一个答案,那么答案就是(n−1)n2+1\frac{(n-1)n}{2}+12(n−1)n+1反之,答案就是一个普通等差数列(r−1)r2\frac{(r-1)r}{2}2(r−1)r代码实现:#include<cstdio>using namespace std;long long原创 2020-07-04 22:10:29 · 165 阅读 · 0 评论 -
CF1371A Magical Sticks
题面传送门显然是可以分类讨论的。如果nnn是奇数,那么我们可以让111与n−1n-1n−1,222与n−2n-2n−2组成一对,剩下nnn一对,这样可以组成n+12\frac{n+1}{2}2n+1对。如果n是偶数,那么我们可以让111与nnn,222与n−1n-1n−1组成一队。那么可以组成n2\frac{n}{2}2n代码实现:#include<cstdio>using namespace std;int t,n;int main(){ scanf("%d",&原创 2020-07-04 22:05:33 · 150 阅读 · 0 评论 -
CF343D Water Tree
题面传送门感觉评分虚高。其实和NOI2015NOI2015NOI2015的软件包管理器差不多,题解正常操作,直接区间覆盖即可。一不小心拿了个次优解代码实现:#include<cstdio>#include<cstring>using namespace std;int d[500039],idea,siz[500039],top[500039],son[500039],id[500039],fa[500039],x,y,z,n,m,k,f[2000039],sum原创 2020-06-27 21:58:40 · 567 阅读 · 0 评论 -
CF438D The Child and Sequence
题面传送门明显势能线段树。这里证明一下取模的下界。对于一个数xxx,若取模的数y>x2y>\frac{x}{2}y>2x,那么x%y=x−y<x2x\%y=x-y<\frac{x}{2}x%y=x−y<2x,若取模的数y<x2y<\frac{x}{2}y<2x,那么x%y<y<x2x\%y<y<\frac{x}{2}x%y<y<2x,则一个数至多取模lognlognlogn次就会为111。修改至多会增加原创 2020-06-13 19:59:27 · 146 阅读 · 0 评论 -
CF920F SUM and REPLACE
题面传送门一眼就是势能线段树的模板题。关于欧拉函数的上界我不会证,这里证一个复杂度下界。对于每一个数xxx,其最大的约数最大是n2\frac{n}{2}2n,故对于每一个n2<y<x\frac{n}{2}<y<x2n<y<x都必定不是xxx的约数,所以复杂度下界lognlognlogn,总复杂度nlognnlognnlogn代码实现:#include<cstdio>#define max(a,b) ((a)>(b)?(a):(b))us原创 2020-06-09 18:38:59 · 153 阅读 · 0 评论 -
CF242E XOR on Segment
题面传送门看着像线段树。直接二进制拆掉就可以取反操作了。拆掉以后就是异或111或者000的操作了。时间复杂度O(26nlogn)O(26nlogn)O(26nlogn)代码实现:#include<cstdio>using namespace std;int n,m,k,x,y,zs,head,a[100039],f1[400039][25],f2[400039][25],sum[400039][25],z[25],ans,tot,pus;inline void hebing(i原创 2020-05-15 19:52:51 · 118 阅读 · 0 评论 -
CF660C Hard Process
题面传送门明显可以尺取法。先把每一位取反,则枚举右端点,左端点单调不降则直接暴力枚举即可。代码实现:#include<cstdio>#define max(a,b) ((a)>(b)?(a):(b))using namespace std;int n,m,k,a[300039],q[300039],x,y,z,l,r=1,mid,tot,ans;int main(){ register int i,j; scanf("%d%d",&n,&m); for原创 2020-05-12 20:38:59 · 159 阅读 · 0 评论 -
CF103D Time to Raid Cowavans
题面传送门显然可以数据分治啊。对于k>nk>\sqrt nk>n时,珂以跑暴力,单次复杂度不超过n\sqrt nn对于k<nk<\sqrt nk<n,珂以离线对每一个kkk跑一遍O(n)O(n)O(n)的预处理,将所有的kkk处理出来,直接调用即可。每次均摊复杂度O(n)O(\sqrt n)O(n)总复杂度O(nn)O(n\sqrt n)O(nn...原创 2020-04-24 20:54:20 · 119 阅读 · 0 评论 -
CF1304E 1-Trees and Queries
题面传送门EEE题居然还能放这种水题。这样走只有三种走法。x−>yx->yx−>yx−>a−>b−>yx->a->b->yx−>a−>b−>yx−>b−>a−>yx->b->a->yx−>b−>a−>y分别求LCALCALCA即可。代码实现:#include...原创 2020-04-18 13:31:22 · 141 阅读 · 0 评论 -
luogu P4462 [CQOI2018]异或序列&&CF617E XOR and Favorite Number
题面传送门不知道你看没看出来这里有两个链接啊。题目叫我们求子串,就很容易想到前缀和,异或又是拥有前缀和性质的,所以就可以用莫队来求啦。记录fif_ifi为iii这个数出现的次数,那么莫队的前移后移就可以通过k⨁alk⨁a_lk⨁al来转移。顺序很重要!!代码实现:#include<cstdio>#include<algorithm>#include<...原创 2020-04-04 13:27:13 · 118 阅读 · 0 评论 -
CF399B Red and Blue Balls
题面传送门这道题…真的无语了。一眼看上去这道题似乎可以状压dpdpdp,只有LLL和RRR两种,然后我手算把样例转成了二进制,准备推转移方程,结果惊奇的发现RBR=(101)2=2RBR=(101)_2=2RBR=(101)2=2,这不就是样例的答案吗?接着推了第二个样例的答案,居然也对了。言归正传,那么我们设fif_ifi为把iii以及其上面的全部翻转为红色的步骤数,那么显然,如果ai...原创 2020-04-01 21:10:48 · 158 阅读 · 0 评论 -
CF1294D MEX maximizing
题面传送门这道题可以任意±x\pm x±x,所以可以%x\%x%x考虑。将每一个数进来后%x\%x%x并加入一个数组f中,设fif_ifi为%x=i\%x=i%x=i的数有几个。同时有一个指针为headheadhead。若head<xhead<xhead<x,那么fhead>0f_head>0fhead>0,head++head++head++如果he...原创 2020-03-26 08:00:04 · 146 阅读 · 0 评论 -
CF1294C Product of Three Numbers
题面传送门题意简述:给定nnn,a×b×c=na\times b\times c=na×b×c=n且aaa,bbb,ccc各不相等且都为正整数,求任意一组aaa,bbb,ccc。暴力即可,将aaa分解质因数后再分解一次就可以了,注意两次分解不能重复。代码实现:#include<cstdio>#include<cmath>using namespace std;...原创 2020-03-25 20:42:37 · 176 阅读 · 0 评论 -
CF1294B Collecting Packages
题面传送门给出nnn与 nnn个特殊点的坐标 (xi,yi)(x_i, y_i)(xi,yi) 。从 (0,0)(0, 0)(0,0)出发, 只能向上和向右移动,求最优路径,或告知无解首先最优化排序,使得其按xxx升序,xxx相同以yyy升序。排好后检查yyy是否全部升序,如果全部升序那么机器人一定可以到达,反之则不能。那么从一个地点到另一个地点走曼哈顿距离,无论怎样都要横着走∣yi−...原创 2020-03-25 20:40:46 · 143 阅读 · 0 评论 -
CF1294A Collecting Coins
题面传送门好无聊的题。英文好的同学跳过下面一段。题意简述:给你a,b,c,da,b,c,da,b,c,d,x1+x2+x3=dx1+x2+x3=dx1+x2+x3=d且a+x1=b+x2=c+x3a+x1=b+x2=c+x3a+x1=b+x2=c+x3。求任意一组x1x1x1,x2x2x2,x3x3x3。那么我们只要先将所有补成一样的并使其最少,然后再判断,如果剩下的ddd为负或d%3≠0d...原创 2020-03-25 20:36:55 · 127 阅读 · 0 评论 -
CF1204C Anna, Svyatoslav and Maps
题面传送门这道题考场上写挂了,咕了好久才补锅。现在看就是一个随手切的题。题目中要求我们将所有aaa,bbb,ccc满足dist(a,b)+dist(b,c)=distr(a,c)dist(a,b)+dist(b,c)=distr(a,c)dist(a,b)+dist(b,c)=distr(a,c)的缩成a,ca,ca,c,求最后的序列。可以注意到n≤200n\leq200n≤200,所以可以...原创 2020-03-22 20:30:47 · 209 阅读 · 0 评论 -
CF1000F One Occurrence
题面传送门平生第一次切cfcfcfFFF题祭其实这道题主席树也可以做,但是我不会,所以只好用莫队水过对于这道题,维护一个栈,栈中表示的是当前区间内个数为111的元素,再设fif_ifi表示iii这个元素在栈中的位置,来了一个数时,若是第一次出现,加入栈中,若是第二次出现,把栈中的这个元素与栈顶互换位置之后把这个元素弹出,注意fff也要跟着换位置并且弹出后fif_ifi要清零。若是取出一个...原创 2020-03-20 18:16:49 · 149 阅读 · 0 评论 -
CF1325A EhAb AnD gCd
题面传送门很明显,cfcfcf第一题的老套路:构造题,只可惜这道构造题不太好,连暴力都能AAA我们来尝试构造一下,题目要求构造出xxx和yyy使得lcm(x,y)+gcd(x,y)=nlcm(x,y)+gcd(x,y)=nlcm(x,y)+gcd(x,y)=n,既然有了公约数,那我们就很容易往互质那方面想了,如果xxx,yyy互质,那么原式变为1+xy=n1+xy=n1+xy=n,只要解这个方...原创 2020-03-17 13:46:56 · 158 阅读 · 0 评论 -
CF2B The least round way
题面传送门其实蛮简单的,不应该有蓝题。只要找到最小的555和222即可。但是注意要特判000代码实现#include<cstdio>#define min(a,b) ((a)<(b)?(a):(b))using namespace std;int n,m,k,s,tx,ty,a[1039][1039],b[1039][1039],z1[1039][1039],z2...原创 2020-04-16 09:33:00 · 106 阅读 · 0 评论