![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Codeforces
文章平均质量分 59
&稚始稚终
这个作者很懒,什么都没留下…
展开
-
Erase Subsequences (字符串+dp)
Erase Subsequences题目传送门:Erase Subsequences思路:看到题目最先想到的就是你可以枚举切割字符串的位置,使其分成两个串。然后接着一个最为朴素的n^3的dp就是,dp[ i ][ j ][ k ]来表示字符串s匹配到第i位,t1字符串匹配到第 j 位,t2 字符串匹配到第k位时是否可行,可行则为1不行则为0。那么这样时间复杂度就来到了n^4方,即使数据很小,这样还是会T的。那么我们就要想办法削减一下dp的复杂度,一个容易想到的优化就是用dp[ i ][ j ]表原创 2021-09-23 00:25:13 · 225 阅读 · 0 评论 -
CF 1295D. Same GCDs
D. Same GCDs题意:给你两个整数a和m,然后使你计算使gcd(a+x,m) = gcd(a,m)(0<=x<=m,a<m )成立的x的数量。思路:已知a<m,0<=x<=m,根据最大公约数的性质a>=b,gcd( a , b ) = gcd( a-b , b )所以如果a+x>=m那么gcd( a+x , m ) = gcd( a+x-m , m )即a+x可以写成( a + x )mod m我们令 x ′ = ( a + x )转载 2021-09-04 21:04:31 · 177 阅读 · 0 评论 -
CF1556E Equilibrium
E. Equilibrium转自大佬的博客AC Code#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e5+10;LL a[N],b[N],sum[N],lg[N];LL maxn[N][30],minn[N][30];LL query_maxn(int l,int r){ int len=lg[r-l+1]; return max(maxn[l][l转载 2021-09-03 16:04:31 · 272 阅读 · 0 评论 -
Codeforces Round #722 (Div. 2) A~D
题目传送门:(比较有意思的一场)CF #722A. Eshag Loves Big Arrays思路:最小的数不可能被删除AC Code#include<bits/stdc++.h>using namespace std;int a[105];int main(){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n);原创 2021-05-25 17:30:23 · 134 阅读 · 0 评论 -
Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version)
C2. Skyscrapers (hard version)题目传送门:C2. Skyscrapers (hard version) 题目大意:有n栋楼,每栋楼最高为hi,不允许存在一栋楼两边都有比他更高的楼,要求建成的楼的总高度最大。思路:1.用单调栈。延续C1的想法,我们要找到一个最高点,然后向左向右全部都向低处扩展。这个最高点将序列分成了两个部分,从左到右是非递减序列,从右到左是非递减序列。那么我们利用单调栈的思想,求出每个数向左所影响的区间和向右所影响的区间,分别从左往右和从右往左求一原创 2021-05-23 22:12:55 · 136 阅读 · 0 评论 -
E. Weights Distributing(图论)
E. Weights Distributing(图论,贪心)题目传送门:E. Weights Distributing题目大意:有n个点,m条路径,每次经过一条路径时都需要一次该路径的花费。有一个花费数组对应着每一条路径,要求给出一个权值分配方案使得从点a->b->c的花费最小为多少。思路:1.假设a->b之后b->c没有经过之前经过的点,那么也就是三点之间经过的路径是一条直线。2.否则b->c经过了之前经过的x,那么也就有了a->x->b->x原创 2021-05-09 23:52:05 · 122 阅读 · 0 评论 -
D. Constant Palindrome Sum(差分)
D. Constant Palindrome Sum(差分好题)题目传送门:D. Constant Palindrome Sum题目大意:给你一个数组a,你可以将其中的每个元素改为[1,k]的任意数字。但是在修改后每对ai + an-i+1都为常数x。思路:假设我们另a1=ai , a2 = an-i+1首先想到的是。1.当x = a1 + a2时需要修改0个数2.当x>=min(a1,a2)+1且x<=max(a1,a2)+k且x!=a1+a2时需要修改其中的一个数3.其他原创 2021-05-09 22:41:10 · 215 阅读 · 0 评论 -
Codeforces Round #720 (Div. 2)
题目传送门:codeforces #720(div2)A. Nastia and Nearly Good NumbersAC Code#include<bits/stdc++.h>using namespace std;typedef long long LL;int main(){ int t; scanf("%d",&t); while(t--) { LL a,b; scanf("%lld%lld",&a原创 2021-05-08 14:43:34 · 200 阅读 · 0 评论 -
Educational Codeforces Round 108 (Rated for Div. 2)
A. Red and Blue Beans题目传送门:A. Red and Blue BeansAC Code#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a原创 2021-04-30 14:15:22 · 95 阅读 · 0 评论 -
D. Cut and Stick(莫队维护区间众数)
D. Cut and Stick题目传送门:D. Cut and Stick题目大意:给你一个a序列,询问q次,每次问区间[l,r]最少可以分为几个子序列,使得子序列中每个数的出现次数小于等于x/2(向上取整,x为子序列长度)思路区间的离线查询首先想到莫队,看到题目的限制就会想到我们需要求得区间的众数。我们用cnt[]数组记录每个数出现的次数,在进行莫队add操作时:众数的维护很简单,只要与加入的数出现的次数取大即可;在进行莫队del操作时:原来是众数的数可能变成不是众数,于是我们可以再开一个数原创 2021-04-22 22:59:22 · 596 阅读 · 0 评论 -
Codeforces Round #709 (Div. 2)D. Playlist
D. Playlist题目大意:有编号1~n的n首歌循环播放,每首歌都有一个自己的类型 a i 。当现在这首歌和上一首歌的类型的gcd=1时,他就会怒删当前这首歌,然后从后面那手歌重新开始听(也就是说不会删连续两首歌),要你求删除的歌的数量和删除的顺序。思路:队列维护链表。初始时,先循环一遍数组,把相邻两首歌的类型互质的加入到队列中。然后开始去队首元素,如果队首的两首歌 i 和 nxt[i] 都没有被删,则删去nxt[i] ,并将nxt[i]置为nxt[nxt[i]],如果两者仍然互质的话,则加入队原创 2021-03-24 23:01:18 · 279 阅读 · 0 评论 -
Educational Codeforces Round 106 D.The Number of Pairs
D. The Number of Pairs题目传送门:D. The Number of Pairs题目大意:给你三 个数c,d,x,要你找到有多少对数满足 c * lcm(a,b) - d * gcd(a,b) = x思路:转自大佬的博客AC Code#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=2e7+10;int primes[N],ans[N],cnt;i转载 2021-03-20 23:33:28 · 101 阅读 · 0 评论 -
Codeforces Round #707 (Div. 2)
比赛传送门:Codeforces Round #707 (Div. 2)A. Alexey and Train思路:按题意模拟即可AC Code#include<bits/stdc++.h>using namespace std;int a[105],b[105],t[105];int main(){ int d; scanf("%d",&d); while(d--) { int n; scanf("%d",&n); for(int i=1原创 2021-03-13 21:54:37 · 1289 阅读 · 5 评论 -
Educational Codeforces Round 105 (Rated for Div. 2)
A. ABC String题目大意:实质上就是括号匹配,只不过‘A’,‘B’,'C’三个字母,每个字母都只能带表一种括号。思路:在任何时刻右括号不能比左括号多,最后要刚好匹配即可。AC Code#include<bits/stdc++.h>using namespace std;int main(){ int t; cin>>t; while(t--) { map<char,int>mapp; mapp.clear();原创 2021-03-03 01:39:03 · 2375 阅读 · 5 评论 -
Educational Codeforces Round 104 (Rated for Div. 2)
A. Arena题目传送门:A. Arena题目大意:有n个人,每个人都有战斗力,当两个人打起来时,战斗力高的人赢并且战斗力加1,当战斗力达到100500时,则成为英雄。问能有多少人能成为英雄。思路:显而易见,除了战斗值最低的人之外,其他的所有人都有可能成为英雄。AC Code#include<bits/stdc++.h>using namespace std;int a[105];int main(){ int t; scanf("%d",&t)原创 2021-02-16 16:31:06 · 1295 阅读 · 2 评论 -
C. Orac and LCM(数学)
思路:gcd( lcm(a1,a2) , lcm(a1,a3) ,lcm(a1,a4) ……lcm(a1,an) )因为都有一个公共因子a1所以gcd1=lcm( a1, gcd(a2,a3,a4……an) )同理 gcd2也是这样的最终答案是gcd(gcd1,gcd2……gcdn)所以我们只要求一个后缀gcd即可重要性质:gcd(lcm(a1,a2),lcm(a1,a3),lcm(a1,a4),…,lcm(a1,an))=lcm(a1,gcd(a2,a3,a4,…,an)AC Code.原创 2021-02-15 16:11:16 · 323 阅读 · 0 评论 -
Codeforces Round #699 E. Sorting Books(dp好题)
E. Sorting Books题目传送门:E. Sorting Books题目大意:书架上有n本书,每本书有自己的颜色ai,现在有一个操作是将一本书取出并放在书架的最右边。问最少需要多少次操作可以使颜色相同的书放在一起。思路:移动的很难考虑,那换个角度不防考虑最大化不移动书的数量。设f[i]表示i~n这些书中最大的不移动的数量。1.如果i这个地方的书要动的话那么很简单f[i]=f[i+1]。2.如果i这个地方不动的话,那么就是让i~n中所有颜色为a[i]的书都不动,动其他书。用R[x]表示原创 2021-02-08 22:10:31 · 301 阅读 · 1 评论 -
Codeforces Round #700 (Div. 2)
A. Yet Another String Game题目传送门:A. Yet Another String Game水题#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--) { string str; cin>>str; for(int i=0;i<str原创 2021-02-08 16:20:40 · 2874 阅读 · 4 评论 -
Educational Codeforces Round 103 (Rated for Div. 2)
A. K-divisible Sum题目传送门:K-divisible Sum题目大意:要你使n个数相加的和是k的倍数,并使n个数中最大的数最小(水题直接上代码)AC Code#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--) { int n,k; scanf("%d%d",&am原创 2021-01-30 01:45:38 · 279 阅读 · 0 评论 -
Codeforces Round #698 (Div. 2) A~F
A. Nezzar and Colorful Balls题目传送门:A. Nezzar and Colorful Balls思路:水题,找到最多有多少个数是形同的即可。AC Code#include<bits/stdc++.h>using namespace std;int a[105];int main(){ int t; scanf("%d",&t); while(t--) { int n; scan原创 2021-01-29 15:18:17 · 1113 阅读 · 1 评论 -
Codeforces Round #681 D. Extreme Subtraction(差分+思维)
D.Extreme Subtraction题目传送门:Extreme Subtraction题目大意:有一个长度为n的数组a。你可以进行无数次如下操作:a1~ai 减1ai~an减1问能否使数组中的元素全部变成0;思路:转化成一个差分问题。(假设差分数组为ans)要使数组中的全部数都为0,那么差分数组也必须为0且ans[1]=0。那么我们来看两种操作对于差分数组有何影响:操作1:ans[1]-1 且ans[i+1]+1。那么我们就可以凭借操作1,将差分数组中的负数变成0,同时减小原创 2020-11-03 17:16:23 · 2068 阅读 · 4 评论 -
codeforces round #673(div2)E题———01字典树求逆序对数量
XOR Inverse题目传送门XOR Inverse题目大意:给你一个n个数的数组a,要你求得一个最小的x,使得x异或每个a[i]之后得到的数组逆序对最少。输出x的值,和逆序对的数量。思路:补了这道题,我学到了原来01字典树还能用来求逆序对的数量(能做出来的人真是tql)。...原创 2020-10-28 23:46:20 · 258 阅读 · 0 评论 -
Codeforces Round #658 (Div. 1) B. Unmerge
B. Unmerge题目传送门:Unmerge思路:我们如果一个数后面跟着一串比它小的数,那么这些数一定来自同一个数列。然后我们就可以把长度为2*n的数列用这种判断方法分成很多段,然后用01背包的思想,看能不能取其中的几段数列从而构成一段长度为n的数列。AC Code#include<bits/stdc++.h>using namespace std;const int N=5000;int p[N];int w[N],tot=0,f[N];//每个子串的长度,子串的数量i原创 2020-11-29 22:54:58 · 222 阅读 · 0 评论 -
Codeforces —1423B. Valuable Paper(二分+网络流求最大匹配)
B. Valuable Paper题目传送门:B. Valuable Paper题目大意:给你n个飞机场和n个造纸厂,飞机厂和造纸厂需要一一对应。有m条道路连接飞机场和造纸厂,通过第i条道路的时间为ti。要使所需要的道路的最大时间最小。思路:二分道路的最大值,然后跑网络最大流求二分图最大匹配,看能否达到所有机场和造纸厂一一对应。AC Code//二分最大边,加上网络流跑二分图匹配#include<bits/stdc++.h>using namespace std;const原创 2020-11-08 15:28:25 · 1268 阅读 · 4 评论 -
Educational Codeforces Round 102 D. Program(线段树)
D. Program题目传送门:D. Program思路:如果要求过程中最多经过多少个数,那么只要求得 区间最大值 - 区间最小+1 即可。区间的最大值和最小值,我们显然都可以用线段树维护,但是题目中还有一个区间的删除操作该怎么进行呢。1.如果删除的区间是后半段,那么只要查询前半段区间的最大值和最小值即可2.如果删除的区间是前半段,那么在查寻后半段区间的最大值和最小值之后,还要将其减去删去区间的和。3.如果删去的区间位于中间,那么就要同时进行第一步和第二步的判断。但需要注意的是,不管是哪种情原创 2021-01-21 17:06:37 · 156 阅读 · 0 评论 -
Codeforces Round #696 (Div. 2)A~D题解
(期末结束后的第一场)A. Puzzle From the Future题目出送门:A. Puzzle From the Future题意:给你一个01序列b,要你求01序列a,使得两者对应位相加之后最大,且两者相加之后连续的相同数字会变成一个。思路:能给1就给1,不能就给0,使得相邻元素都不相等且结果最大。AC Code#include<bits/stdc++.h>using namespace std;const int N=1e5+10;int a[N],res[N原创 2021-01-20 16:46:04 · 2238 阅读 · 4 评论 -
F. Strange Housing(思维,图论)
F. Strange Housing题目传送门:F. Strange Housing题目大意:对于图中的n个点进行染色,一条边的两端不能同时染色。染色之后端点有染色的边会保留下来,要求染色只有的图连通。思路:1.显然当图连通时一定存在答案,否则不存在。2.bfs遍历所有点:如果当前节点没有染色,且相邻的所有点都没有染色,就染色,否则不染色。如果当前节点已经染色,那么相邻的所有节点都不染色。证明:显然这种方案不会存在一条边两个端点都染色的情况。其次,如果图不连通,一定是有一个点连接的所有点原创 2021-01-18 21:56:10 · 346 阅读 · 0 评论 -
Good Bye 2020
补题ingA. Bovine Dilemma题目传送门: A. Bovine Dilemma思路:只要暴力找到有多少长度不同的三角形底即可AC Code#include<bits/stdc++.h>using namespace std;int x[100];int ans[100];int main(){ int t; scanf("%d",&t); while(t--) { int n; scan原创 2021-01-17 22:41:30 · 256 阅读 · 0 评论 -
Educational Codeforces Round 101 A~D
因为准备期末考试,漏了半个多月的cf没有打,现在回来补补,顺便找一下手感(好久没打,都生疏了QAQ)A. Regular Bracket Sequence题目传送门:A. Regular Bracket Sequence思路:只有一对括号‘()’,剩下的全部都是问号,每个问号都有可能是‘(’或者是‘)’,问能不能使所有的括号匹配。最开始没有看到只有一对括号的那个条件,还写复杂了。AC Code#include <bits/stdc++.h>using namespace std原创 2021-01-16 19:39:48 · 1140 阅读 · 3 评论 -
Codeforces Round #692 (Div. 2)D. Grime Zoo
(前缀后缀+思维+贪心)D. Grime Zoo题目传送门:D. Grime Zoo题目大意:给你一个由‘0’ 和‘1’和 ‘?‘组成,其中有一个01子序列就会产生x点愤怒值。每有一个10子序列就会产生y点愤怒值。其中问号’?'可以变成0或者是1。问愤怒值的和最小为多少。思路:我借鉴了许多人的想法之后,我个人比较好理解的想法是:当一个序列中0和1的数量固定时,子序列00和11的数量也是固定的,子序列01+10的数量也是固定的。那么当x>y时,我们贪心的想要01尽可能少,10尽可能的多,原创 2020-12-21 16:53:26 · 1610 阅读 · 4 评论 -
Codeforces Round #692(div2) C. Peaceful Rooks
(思维+图论)C. Peaceful Rooks题目传送门:C. Peaceful Rooks题目大意:给你一个n*n的棋盘,有m个棋子(m<n)每个棋子都在不同的行和列。每个棋子可以进行水平和竖直移动。问最少移动多少次使得每个棋子位于棋盘的主对角线上。思路:如果是本来就位于对角线上的点,那么自然就没有必要进行移动了,否则就是在浪费操作次数。那么不在对角线上的点一定需要操作一次,竖直移动或者水平移动到对角线上。但是我们还发现可能会有n个点构成一个环,就像样例3一样。这个时候我们可以先原创 2020-12-21 14:28:55 · 1676 阅读 · 2 评论 -
Codeforces Round #691 (Div. 2) A-C题解
(感觉这场有点毒呀,是我太菜了)A. Red-Blue Shuffle题目传送门:A. Red-Blue Shuffle题意:给你n张牌,每张牌上有一个红色的数字和一个蓝色的数字,你可以将牌随便排序,问你是红色组成的数字大于蓝色的概率大,还是蓝色组成的数字大于红色的概率大,还是两者相等。思路:题目也没要求具体的概率。那么显然牌上红色数字大于蓝色的数字的牌的数量比较多的话,那么就是红色赢。同理也可判断出蓝色赢或者两者平局。AC Code#include<bits/stdc++.h>原创 2020-12-19 22:45:24 · 2688 阅读 · 6 评论 -
Educational Codeforces Round 100 A—D题题解
A. Dungeon题目传送门:A. Dungeon题目大意:三个怪物具有a,b,c的血量,每发射一次炮弹,会对一个怪物造成一点伤害。每发射6次之后,第7次就是蓄力炮,对三个怪物同时造成一点伤害。问三个怪物能不能被同一个蓄力炮同时杀死。思路:如果a + b + c 的和sum是9的倍数原因是只有9的倍数才可能被蓄力炮同时秒掉。且min(a,b,c)>=sum/9 ,因为在最后一次蓄力炮之前,每个怪物都不能死。AC Code#include<bits/stdc++.h>us原创 2020-12-18 16:58:32 · 1678 阅读 · 1 评论 -
F. The Treasure of The Segments
枚举+二分F. The Treasure of The Segments题目传送门:F. The Treasure of The Segments题目大意:有n个区间,每个区间是从 li 到 ri , 问你最少需要删除多少个区间才能使省下的所有区间都互相有交点。思路:我们可以想到,如果区间b的左端点大于区间a的右端点,那么区间a和b必然没有交点;如果区间b的右端点小于区间a的左端点,那么两个区间同样不会有交点。那么我们枚举每个区间,然后二分求出,上述两种区间的数量,即为要删去的区间的数量。详原创 2020-12-16 16:42:36 · 324 阅读 · 0 评论 -
Codeforces Round #688 (Div. 2) A~D题题解
A.Cancel the Trains题目传送门:A.Cancel the Trains题目大意:如图所示,竖向轨道的火车从最下面出发,横向轨道的火车从最左边出发,所有火车以相同的速度行驶,问你为了避免火车相撞,最少需要去除几辆火车。思路:因为速度都相同,所以题目数据中如果存在竖向火车的出发索引和横向火车的出发索引相同,那么必然会相撞,去除一辆。AC Code#include<bits/stdc++.h>using namespace std;typedef long lo原创 2020-12-05 00:18:35 · 816 阅读 · 3 评论 -
Codeforces Round #687(Div2)A~D题题解
A. Prison Break题目传送门:A. Prison Break题目大意:有一个n*m的监狱,每一个格子有一个犯人,坐标为( r , c )的格子有一条逃生通道,犯人每一秒可以向相邻的一个格子移动,问所有犯人到达逃生通道最久需要多少秒。思路:判断监狱四个角上的犯人到达逃生通道的时间即可AC Code#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&原创 2020-11-29 20:12:50 · 2534 阅读 · 8 评论 -
Codeforces Round #684 (Div. 2) A——C2
A. Buy the String题目传送门:A. Buy the String题目大意:给你一个01字符串,购买0需要花费C0,购买1需要花费C1,01之间进行转换需要花费h。问购买整个字符串的花费。思路:只有 max(C0,C1) > min(C0,C1)+h时才有必要进行转换。AC Code#include<bits/stdc++.h>using namespace std;int a[1005];int main(){ int t; scan原创 2020-11-18 11:07:56 · 807 阅读 · 1 评论 -
Codeforces Round #683 (Div. 2)A-D题题解
A. Add Candies题目传送门: A. Add Candies题目大意:给你一个n,表示1~n的序列。你可以进行m次操作,每次操作需选中一个其中的一个数,第 j 次操作可以让除了被选中的数的其他所有数加 j 。问你如何构造这样的m次操作使得最后所有数都相等,(操作次数不要求最小)。思路:只要使所有数变成1+2+3+……n即可。AC Code#include<bits/stdc++.h>using namespace std;int main(){ int t原创 2020-11-16 21:54:13 · 257 阅读 · 0 评论 -
Codeforces 1285D(01字典树求异或最大值)
D. Dr. Evil Underscores题目传送门:Dr. Evil Underscores题目大意:给你n个整数,然后选择一个数X,使得 ai xor X 之后的最大值最小,求最小值。思路:刚开始看到这种异或最大值的字眼就本能的往字典树的方向去思考。最开始想的是用每个数和其他数求异或,然后取最小值,但是n^2的复杂度肯定会超时。然后想了一会,当某一位二进制上全是0或者是1时,x相应的位置上就应该和它们相同,这样肯定可以使最后的答案最小。关键是这一位二进制上既有1又有0时该怎么考虑。我刚原创 2020-11-14 16:58:24 · 223 阅读 · 0 评论 -
Codeforces 1280C: Jeremy Bearimy
Jeremy Bearimy(这道题目是树上点对距离和的最大值和最小值问题)题目传送门:Jeremy Bearimy题目大意:给你一棵有2n个点的带权树,任意选择n对点,求每对点之间的距离的和的最大值与最小值。思路:考虑最小值:贪心思想。既然是求最小值,那么我们肯定要选取尽可能少的边。当一条边的两边都为奇数点时,这条边必须加到结果中。因为当一端点的数量为奇数时,他们不能两两配对,那么必然有点需要经过这条边去另一边寻找点进行匹配。那么自然可以想到当一条边的两端都为偶数点时,两端的点都可以自行匹配原创 2020-11-05 20:15:18 · 844 阅读 · 0 评论