
CodeForces
给我一瓶AC钙
是一颗萌菜没错了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
我的ACM之旅
仅以此来记录我短暂的ACM时光从一个蒟蒻成长为一只年龄更大的蒟蒻写在自己blog了,欢迎来踩原创 2021-01-08 16:14:54 · 193 阅读 · 0 评论 -
(CodeForces) L - LRU Algorithm Gym - 102394L (模拟+字典树)
传送门题意:给定一个n个数的数字序列,第i个数为a[i],每次操作会将a[i]插入或移到最前端:1.若a[i]已经在序列中出现过,则将其移到最前端,并删除原出现位置2.若a[i]未出现过,则直接将其插入到最前端有q个询问,每个询问给出一个长度为m的序列,问是否在某个时刻询问序列与操作的序列相同,忽略后缀的0(就是操作系统中的LRU,刚好在学解:由于物理块的个数不知道,我们可...原创 2019-11-14 20:43:09 · 515 阅读 · 0 评论 -
(CodeForces) F - Rectangles Gym - 101982F (线段树+扫描线)
题意:给出n个矩形的位置,问重叠奇数个矩形的面积之和解:求面积并的时候是只要线段被覆盖的次数大于0,那就是算进去的,而这个只要奇数覆盖,所以只要异或就可以了,只有奇数次覆盖的线段,我们才考虑了。(把扫描线的知识都忘了,那时候也没学好学习扫描线#include<bits/stdc++.h>#define il inline#define pb push_back#de...原创 2019-10-16 21:12:00 · 433 阅读 · 0 评论 -
(CodeForces) J - Shopping Gym - 101201J (线段树+取模)
题意:每次给你v ,l,r,让你将v逐个对区间l~r的数取模,求最后结果。解:对于一个数取模,那只有模数小于等于它取模才有意义,要不然取模的结果还是它本身,所以我们取区间中第一个小于等于该数的,并从他的位置向后继续找,因为取模每次下降一半,然后找区间小于该数最先出现的线段树即可。#include<bits/stdc++.h>using namespace std;type...原创 2019-10-15 22:26:02 · 224 阅读 · 0 评论 -
(CodeForces) E. Pavel and Triangles (贪心)
传送门解题思路:三角形的形状只有两种(2 ^ i, 2 ^ i, 2 ^ i)或者(2 ^ i,2 ^ i,2 ^ j)(i>j),不可能有三个边都不同的,因为是2的幂次,这样不可能构成三角形。用之前剩下的来构成三角形即采用(2 ^ i,2 ^ i,2 ^ j)(i>j)是更好的,对当前的i消耗少,也能得到更多的三角形,然后再去考虑(2 ^ i, 2 ^ i, 2 ^ i)...原创 2019-04-09 14:12:05 · 214 阅读 · 0 评论 -
(CodeForces) D. Kefa and Dishes (状压dp)
传送门题目大意:有n个菜,每个菜只能吃一次,最多吃m个,每盘菜都有一个快乐值,吃菜的先后顺序也会增加快乐值。解题思路:一开始尝试用最小费用最大流,最后建了一个很复杂的图,发现并不是很好建出来,遂放弃,后来看了别人的写法状压dp,太菜了啊。dp[i][j],i二进制代表现在吃的菜的状态,1代表吃了,0代表没吃,j代表最后吃的j,这样达到的最高快乐值。由当前的dp[s][j],可以去更新后...原创 2019-04-12 10:49:34 · 334 阅读 · 0 评论 -
(CodeForces) B. Bear and Blocks (dp)
传送门题目大意:一列上有若干个方块堆,每堆方块有一个高度每次可以消去这堆方块最外面的那层,问要几次才能消去。解题思路:一看题意和图一开始有点手足无措,不过我们考虑到对于每一堆(列)想将他拿光,有三种情况,1,左边的拿光了,才能一次性将他拿完,2右边的拿光了,才能一次性将其拿光,3,一个一个的将其拿光(这种也只可能比左右的都矮的才可能优),所有可以只考虑左边的dp一次,只考虑右边的dp一次...原创 2019-04-12 10:36:13 · 292 阅读 · 0 评论 -
(CodeForces) C. Geometric Progression
传送门题目大意:求满足倍数是k,长度为3的序列有多少个。解题思路:对于一个a[i],我们只要知道他的前面有多少个a[i]/k,后面有多少个a[i]*k就行了呀,所有我们用两个map维护,某个数字总共出现了多少次,和已经出现了多少次就行了,然后就是要注意一下,k为1和a[i]为0的情况,这地方我还wa了几发。#include<bits/stdc++.h>#define i...原创 2019-04-12 10:21:32 · 372 阅读 · 0 评论 -
(CodeForces) F. Clique in the Divisibility Graph (dp)
传送门题目大意:给出一个数组序列,要求最长的成倍增长(倍数不需要相同)的序列。解题思路:首先这肯定是个dp,首先我们可以将整个序列先排序,如果我们考虑a[i],那他可以从他的因子转移过来,但是这样每个都要算个因子,成本太大,我们不如从当前这个a[i]往后推,倍数的增长,知道超过序列的最大值,这样就是一个log的复杂度了,num[j]代表以j结尾的满足题意的最长长度。#include&...原创 2019-04-12 10:15:16 · 267 阅读 · 0 评论 -
(CodeForces) Round #547 (Div. 3) (全)
应该没人来看了吧,就贴个代码了A - Game 23#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(_data,v,sizeof(_data))using namespace...原创 2019-04-02 20:17:07 · 130 阅读 · 0 评论 -
(CodeForce) C. Edgy Trees (并查集)
传送门题目大意:给你一棵树,有黑边和紫边,一种k个元素的集合,a1到a2走最短路径.....只要经过黑边那就是好的,问有多少个这种集合。解题思路:不考虑紫边黑边,就k个元素的集合,那有n^k个。考虑到如果那个集合都是一个全是紫边联通块里的元素,那如何也是不可能走到黑边的,或者是只和黑边连接的点,这也算是一个联通块。那只要把总共的减去这些不合法的,那就是正确的了。减去每个不合法联通块的个数的...原创 2019-03-28 15:16:12 · 268 阅读 · 0 评论 -
(CodeForces) D. Frets On Fire
传送门解题思路:对于排序好的a序列,先将相同的过滤掉得到b序列,然后计算每个值的最大贡献,即bi和b(i+1)的差,超过了这个就重合了,然后最后一个数的贡献当然是可以无穷大。对于贡献up当然也需要排个序,用sum来算一下前缀和。这样在每次查询的时候,二分一下区间长度+1在up数组上的位置pos,pos左边的,说明贡献都可以跑满,即前缀和sum[pos-1],后面的贡献都是大于len+1的,所以...原创 2019-04-09 14:20:59 · 173 阅读 · 0 评论 -
(CodeForces) D. Alarm Clock (贪心+尺取)
传送门题目大意:有n个闹铃,Vitalya能够被闹铃叫醒的条件是有在m个连续时间内,至少有k个闹铃会响,求关掉最少的闹铃使得Vitalya不会被吵醒。解题思路:先按闹钟响的时间排序,贪心策略,对于长度<=m的区间,要关闹钟,我们优先选择去关后面的,直观考虑因为后面的闹钟可能性更大的影响后面的区间,#include<bits/stdc++.h>#define il...原创 2019-04-18 14:18:30 · 444 阅读 · 0 评论 -
(CodeForces) E. Maximum Subsequence (折半搜索)
传送门解题思路:一开始并不知道折半搜索这个算法,无论如何都不知道将2^35这么多种情况压缩,在1e9的复杂度解决出来,折半搜索就是将序列a分成两个部分,分别去解决每个部分的子集,那也就最多2^18中情况。然后当我们选中一部分的一个子集x时,去第二个部分中找小于m-x最大的(二分),这样就完美解决了,喵啊。#include<bits/stdc++.h>#define il i...原创 2019-04-18 15:23:13 · 451 阅读 · 0 评论 -
2019东北四省 B. Balanced Diet
传送门题意:有n块糖,m种类型,并且每种类型的糖有一个限制Li,只能取>=Li或者0块糖,然后给出一个判定的标准S/C,S为所取糖的价值总和,C为所取的类型中数量最多的。思路:如果C确定,那么对于每种糖,如果能取,我们必定是贪心取价值最大的,所以可能取C块,或者将其取完(总数<=C);如果每次枚举C都去暴力枚举贪心的话这样肯定是不可以的,开一个vector数组f,f[i]代表当...原创 2019-05-30 13:37:49 · 895 阅读 · 0 评论 -
2019东北四省 H. Skyscraper (树状数组)
传送门我菜逼我不会写,看了题解,喵啊。题意:思路:#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(_data,v,sizeof(_data))#defi...原创 2019-05-30 18:30:08 · 979 阅读 · 0 评论 -
(Codeforces) Round #566 (Div. 2) A,B,C
传送门A:#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(_data,v,sizeof(_data))#define sc(n) scanf("%d",&n)#d...原创 2019-06-12 20:25:20 · 169 阅读 · 0 评论 -
(CodeForces)D. White Lines (暴力)
传送门题意:给出一个矩阵,格子有黑白两种,同时给你一个边长为k的矩阵,你可以使得一个边长为k的矩阵变为全白,使得白线(一行全白或一列全白)的个数最多。解:没想到什么好办法,感觉就是暴力了吧,我的想法是先处理每个点是否可以到达上界,左界,右界和下界,同时将原本存在的白线先计算了,考虑矩阵平移,考虑列,每次就增加一列,减少一列,所以我们O(1)考虑这个贡献就行了考虑行,每次下移也就增加一行减少...原创 2019-08-12 11:39:01 · 225 阅读 · 0 评论 -
(CodeForces) D. Water Tree (树链剖分+线段树)
传送门将一棵子树覆盖为1,将一点到根路径上的点覆盖为0,询问一个点是1还是0;用树链剖分+线段树维护即可。#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) memset(_data,v,sizeof(_data))#define SZ(a) int((a)...原创 2019-09-10 18:31:59 · 314 阅读 · 0 评论 -
(CodeForces) E. Xenia and Tree (lca+分块+最短路)
传送门题意:给定一棵树,一开始只有1为红,其他点为蓝。两种操作:1,把一个点染成红点。2,询问一个点到最近红点的距离。解:数据量只有1e5,n根号n*log应该是可以的,主要是这个染色后,我们不能每一次染色后都去跑一次最短路(bfs就可以了),所以我们当修改数目达到根号n时再去进行一次最短路,查询是如果有点是未更新状态,我们可以通过lca来求得两点的距离,这样就可以保证复杂度是可行的。...原创 2019-09-19 14:29:20 · 384 阅读 · 0 评论 -
(CodeForces) Round #548 (Div. 2) A,B,C,E
传送门A - Even Substrings解题思路:从前往后遍历,如果当前s[i]是偶数,那以它为结尾那就有i+1种可能。#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(...原创 2019-03-28 15:05:45 · 157 阅读 · 0 评论 -
(CodeForces) Round #550 (Div. 3) (全)
传送门A. Diverse Strings解题思路:先对字符串排序然后判断一下就行了。#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(_data,v,sizeof(_dat...原创 2019-04-01 21:01:14 · 246 阅读 · 0 评论 -
(CodeForces) Round #387 (Div. 2) D,Winter Is Coming E,Comments
D. Winter Is Coming(贪心)题目大意:有一条冬季轮胎,可以在零下的温度使用,而且寿命为k天。夏季轮胎只能在零上的温度使用,但寿命不限。然后有n天,并且给你n天的温度。求最少的换胎次数,使得主人公可以安全度过冬季。解题思路:一开始想的也是贪心,就是一开始能省则省,如果最后一段可以不换,那就不换。很快就把自己驳倒了,这是个傻逼策略无疑,因为中间有些夹在两个负数段中的正数段可能...原创 2019-03-28 11:14:04 · 164 阅读 · 0 评论 -
(CodeForce) F. Ivan and Burgers(线性基+离线)
视频题解戳这里传送门题目大意:有n个汉堡店,每个店里最贵的汉堡是ci元,q次询问,从l到r,所能花费的最多钱数(结束与开始时的金额差),但是花钱不是直接的加减,规则是手里有d元,要花费c元,那支付只后,他还有d^c元。开始是他有非常多个1(rich)。解题思路:其实这个题稍微思考一下就可以转化成求(l,r)区间的最大异或值,这个值和他初始的钱异或,差值就是这个数。然后又要多次查询,时间...原创 2019-01-15 12:02:50 · 418 阅读 · 0 评论 -
(CodeForces) F. MST Unification (最小生成树)
视频讲解戳这里传送门题目大意:给你一个图,你可以使得一些边权值变大(一次操作+1),使得最小生成树唯一且值不变的最少操作次数。解题思路:kruscal算法的思想是每次都选权值最小的边且边的两头不在一个集合。最小生成树的值已经确定,不唯一的情况我们可以考虑到有几条权值相同的边,从中选一条或者几条起到的效果是相同的,所以我们从中选定了几条之后,后面起相同作用的我们都逐一操作数++,(为啥操...原创 2019-01-25 13:06:30 · 493 阅读 · 0 评论 -
(CodeForces) E1,E2. Array and Segments (Easy / Hard version) (线段树||差分)
视频讲解戳这里(感觉我讲的还没这写的清楚)传送门题目大意:n个数,可选的m次操作,一次操作区间[l,r],使得区间中的数全都减1,问你选那几个操作可以使得该数组的最大值-最小值最大。E1,E2的区别就是一个数据大一个数据小。解题思路:一开始是没有头绪的,这是让你选操作而不是让你操作,但是还是很容易联想到差分和线段树操作的。我们可以考虑一顿操作之后数组中必然会出现最大值和最小值,因为操作...原创 2019-01-25 12:32:19 · 320 阅读 · 0 评论 -
Codeforces Round #535 (Div. 3)A,B,C,D,E1,E2,F
传送门A. Two distinct points解题思路:只要考虑左右端点即可,在简单讨论一下。代码如下#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<queue&g...原创 2019-01-25 13:07:09 · 290 阅读 · 0 评论 -
(CodeForce) E. Andrew and Taxi(二分+拓扑)
视频题解戳这里传送门题目大意:一个有向图,给你m条有向边,每条边都有权值(即修改这条边方向所要付出的代价),如果确定一个代价v,则权值小于等于vv的边都可以被修改。求使得图变得没有环所需要的最小v,改变边的个数,和一种方案。解题思路:一开始有往二分这方面考虑,但是却不知如何二分,这个题二分的是最小代价,那判断条件是什么呢,小于等于代价v的边相当于无向边,我们可以随意控制其方向,但是大于...原创 2019-01-14 17:40:24 · 681 阅读 · 0 评论 -
(CodeForces) Round #532 (Div. 2) A,B,C,D,E,F
视频题解戳这里A. Roman and Browser传送门解题思路:暴力枚举就可以出答案。#include<iostream>#include<algorithm>#include<string>#include<queue>#include<stack>#include<map>using n...原创 2019-01-14 16:48:00 · 342 阅读 · 0 评论 -
(CodeForces) D. Police Stations
传送门题目大意:一个连通图(树型),每个点都是一个城市,有些城市是有警察局的,任何城市都可以到达d距离的警察局,即每个警察局都有一个有效范围d.问你最多可以删除多少条路,使得每个城市依然可以到达警察局。解题思路:我们可以这样想,既然给了你k个警察局,那当然是每个都要用上才是最优的,每个城市都应该优先选择和它最近的警察局,如果它选择远的,只会多走一些没有必要的路径。所以可以从每个警察局同时开...原创 2018-12-11 09:19:25 · 287 阅读 · 0 评论 -
(CodeForces ) C. Bank Hacking
传送门题目大意:一个联通网络,每个点都有权值,破坏一个点,需要有>=改点权值的强度,破坏一个点之后,它会给他范围为2的点都+1。问最小需要的强度大小。解题思路:这道题我们可以贪心的来想,如果最大的点max唯一,我们肯定要先破坏最大的那个点max,如果先去破坏比较小的点,最后破坏最大点的强度会变大,我们需要的强度反而会变得更高。但是如果最大的点不唯一,那就再需要考虑一下了。具体情形...原创 2018-12-11 09:07:48 · 257 阅读 · 0 评论 -
(CodeForces) Round #533 (Div. 2) A,B,C,D
传送门总体还说这场div2还是比较简单的,但是没有多上点分,丧A. Salem and Sticks解题思路:暴力题,枚举t判断就行,因为1<=ai<=100。代码如下:#include<cstdio>#include<iostream>#include<algorithm>#include<string>#in...原创 2019-01-21 11:44:14 · 197 阅读 · 1 评论 -
(CodeForces) C.Ayoub and Lost Array (线性dp)
视频讲解戳这里传送门题目大意:一个数组的大小为n,每个元素的的取值范围是[l,r];然后数组中所有数的和能被3整除,求这样数组的个数,结果mod 1e9+7.解题思路:这题一看有两种想法,一是线性dp,二是组合数,最后还是用线性dp解决了这道题,dp的思路也挺简单的dp[i][j]代表数组里有i个数,和模3为j的个数,我们可以事先将[l,r]区间中mod3为0,1,2的数算出来,代码如...原创 2019-01-21 11:30:12 · 301 阅读 · 1 评论 -
(CodeForces) D. Kilani and the Game (搜索)
视频讲解戳这里传送门题目大意:一个n*m的图,有空格子'.',也有障碍物'#',也有各个玩家的城堡,编号对应着玩家的编号1,2,3.....;每个玩家轮流开始,有他城堡的地方就可以向上下左右扩散,而且分别有一个扩散的速度si,也就是一次可以往外扩散si层,当所有玩家都不能动时,问各个玩家所有的城堡数。解题思路:思路还是很清晰的,就是每一轮对每一个玩家宽搜一次,每个玩家宽搜si层,往外宽...原创 2019-01-21 11:43:31 · 409 阅读 · 0 评论 -
Codeforces Round #546 (Div. 2) A,B,C
传送门A. Nastya Is Reading a Book:暴力枚举#include<bits/stdc++.h>using namespace std;const int maxn=1e3+5;int le[maxn],ri[maxn],n,id;int main(){ scanf("%d",&n); for(int i=1;i<...原创 2019-03-18 15:06:45 · 136 阅读 · 0 评论 -
(CodeForces) C. Painting the Fence
传送门解题思路:就是枚举放弃的两个区间,直接是肯定爆炸的,但是我们差分和前缀和预处理一下就行了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e4 + 5;int n,q,sum[maxn],num[maxn];int l[maxn],r[maxn];i...原创 2019-03-07 20:25:28 · 261 阅读 · 0 评论 -
(CodeForce) Codeforces Round #541 (Div. 2) A,B,C,D,F
传送门A. Sea Battle:围成的不规则图像的周长(就是矩形的周长),在加四个角重复的部分。#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<queue>#...原创 2019-02-25 15:53:44 · 455 阅读 · 0 评论 -
(CodeForces) Codeforces Round #541 (Div. 2) D. Gourmet choice (并查集+拓扑排序)
传送门题目大意:第一天n个菜,第二天m个菜,一个n*m的矩阵代表他们之间的优劣关系,根据这个矩阵用数字来给每一个菜品打分,使得最大的数字最小。比如 Aij 是> 说明第一天的 i菜 比第二天的 j菜好。解题思路:根据题目的描述,两道菜之间的优劣情况,我们可以连一条权值为1的单向边,而哪些没有指向他的点,那就是最小的数为1。从入度为0的点开始,一步步往里面走,我们自然可以想到拓扑排序,...原创 2019-02-25 15:33:46 · 152 阅读 · 0 评论 -
(CodeForces) D. Flood Fill
视频题解戳我传送门题目大意:选择一个初始点,同色的为一个块,每一次可以将包含起始点块的左或右的那个方块变色,问最少操作次数。解题思路:对数据已经存在的同色块,留一个就好了,不影响结果。考虑若是1 2 3 4,都是不同色的,那要操作size-1次3次;若有1 2 1这种类似回文的,那就操作一次就行了,所有我们求出序列中最长的回文子序列长度/2 ,那就是我们可以节省的操作次数,我们可以将原...原创 2019-02-11 20:45:14 · 507 阅读 · 0 评论 -
Codeforces Round #538 (Div. 2) A,B,C,D,E
视频题解戳我题目戳我 A. Got Any Grapes?解题思路:看清题意,手动模拟一下,看看每个人的需求能不能满足。#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<cstring>#include...原创 2019-02-11 20:48:53 · 549 阅读 · 0 评论