Codeforces
Roll_Keyboard
这个作者很懒,什么都没留下…
展开
-
网络流题目合集
属实狠活HDU 2883 kebab还是区间k重覆盖的变形,然而每想到就这?HDU 3315 My BruteHDU 3947 River Problem 区间k重覆盖的变形拉了原创 2019-10-29 13:31:52 · 699 阅读 · 0 评论 -
Codeforces Round #316 (Div. 2) D. Tree Requests(dfs序+状态压缩)
题意:给你一颗树,父节点编号总是小于子节点编号,每个节点都有一个字符,问一个节点x的子树(包括自己)且深度为y的子节点是否能组成一个回文串思路:通过一次dfs,能够得知每个节点的dfs序和深度,如果在dfs时候将同一深度的节点放入一个数组,那么就是有序的,而dfs序有一个性质,同一子树的dfs序是相邻的,那么我们就知道了对于一个子树来说,dfs序是某一个连续的区间。 而之前我们深度的数组是有序的,原创 2018-01-19 14:21:34 · 225 阅读 · 0 评论 -
Codeforces Round #321 (Div. 2) D. Kefa and Dishes(状压DP)
题意:思路:错误及反思:代码:原创 2018-01-18 14:54:00 · 246 阅读 · 0 评论 -
Codeforces Round #321 (Div. 2) C. Kefa and Park
题意:给你一颗树,从根节点出发到叶子节点,如果中间有连续m个标记的点就返回,问有多少个方法思路:dfs水题,模拟跑跑就好了错误及反思:写的太快,忘了考虑只有一个儿子的情况了。。。代码:#include<bits/stdc++.h>using namespace std;const int N = 100100;int n,m;int arr[N];int ans=0;vector<int原创 2018-01-18 14:43:10 · 243 阅读 · 0 评论 -
Codeforces Round #319 (Div. 2) E. Points on Plane(分块+排序)
题意:现在有1e6个点,(0= < x,y<=1e6),对他们进行排序,使得所有相邻两个点的曼哈顿距离之和小于2.5e9思路:用类似莫队那样的分块,n‾√\sqrt{n}进行分块,这样相邻x最多为(√n)\sqrt(n),一共n个x,距离和为nn‾√n\sqrt{n},对于y,每个块移动n,共n‾√\sqrt{n}个块,所以总和还是nn‾√n\sqrt{n},但是需要注意一个地方,如果就是最初始的莫原创 2018-01-17 15:25:19 · 316 阅读 · 0 评论 -
Codeforces Round #301 (Div. 2) D. Bad Luck Island(概率dp)
题意:有n个石头,m个剪刀,k个布,每次会等概率的两个对决,胜利的留下,失败的离开,问最后剩下的全是石头,全是剪刀或全是布的概率思路:利用概率dp求解,dp[i][j][l]表示,那么我dp[i][j][l-1]只能由dp[i][j][l]转移过来,对于dp[i-1][j][l]和dp[i][j-1][l]也是同理的,转移方程是dp[i][j][l-1]=dp[i][j][l]*(j*k)/(j*k原创 2018-01-23 08:59:30 · 363 阅读 · 1 评论 -
Codeforces Round #305 (Div. 2) D. Mike and Feet (单调栈)
题意:给你n个数字,求出每1个,2个,3个…n个连续数字所构成的区间里面的最小值之中的最大值(好绕口,解释下样例好了) 10 1 2 3 4 5 4 3 2 1 6 当以3个连续数字作为一个区间的时候,我们可以得到每个区间的最小值是1,2,3,4,3,2,1,1所以输出的第三个数字是4思路:利用单调栈,可以求出对于某个数字来说,到左边或到右边第一个比它小的数字的距离,那么如果我们求出这个距离以原创 2017-11-23 21:03:39 · 227 阅读 · 0 评论 -
Codeforces Looksery Cup 2015 B - Looksery Party (构造)
题意:现在举行聚会,有n个人,如果某个人去了聚会,他会给自己和某几个其他人发短信(没有去就不发),现在有个人预测了这n个人收到短信的数量,需要你构造一个邀请方案,使得预测全错思路:首先,当某个人收到的短信数量已经超过预期的时候,我们就不用考虑他了,因为其他人的变化,对他来说只能是增加短信数量,这样的话怎么都不会达到预测的数量 而注意到题目说某个人去了的话,必定给自己发一个短信,那么如果此刻某个人收原创 2017-11-30 18:05:47 · 217 阅读 · 0 评论 -
Codeforces Round #306 (Div. 2) B. Preparing Olympiad (状态压缩)
题意:给你n个数字,挑出任意多个,要求最小和最大的差值不小于x且总和在l和r之间,问有多少种方案思路:由于n极小,那么我们可以直接状态压缩,用二进制表示每个数字的使用状态,然后看是否符合要求即可错误及反思:代码:#include<bits/stdc++.h>using namespace std;const int maxn = 20;long long arr[maxn];int n;l原创 2017-11-29 17:06:17 · 226 阅读 · 0 评论 -
Codeforces Round #306 (Div. 2) D. Regular Bridge (构造)
题意:构造一个无向图,让每个点的度数为k,并且至少一个桥(可能无法构造出)思路:首先,我们能够想到,如果一个无向图含有一个桥,在割断桥以后,如果左边和右边相等,那么是不影响结果的,所以我们只要想办法构造一边就好了。那么对于连着桥的那个端点,它还需要k-1条边,那么我们就暂时在加k-1个点,我们发现,这样是肯定无法满足的,那么我们加一个点,发现之前的k-1个点虽然满足了,可是这个新加的点无法满足,那么原创 2017-11-29 17:01:47 · 240 阅读 · 0 评论 -
Codeforces Round #306 (Div. 2) E. Brackets in Implications (构造)
题意:给你n个数,数字仅为0和1,现在定义一种运算方式”->”,运算满足0->0=10->1=11->0=01->1=1现在让你将这n个数字通过->运算符和’(’ ‘)’连接起来(括号优先级大于->),使得运算结果为0思路:观察四个等式,发现,如果要让结果为0,必须变成1->0的情况,那么最后一位必定为0,最后一位不是0,怎么计算都没法让等式最终结果变成0,这个时候,问题我们的问题变成了让前n-1个原创 2017-11-29 16:36:17 · 199 阅读 · 0 评论 -
codeforces 161D D. Distance in Tree (树分治)
题意:问一颗树有多少个路径距离为k思路:是poj1741的简单版,在树分治的时候,对于某个重心只要维护某个长度的有多少即可,因为k很小,所以可以直接开个数组存错误及反思:中间加的过程忘了会爆int了。。。代码:#include<bits/stdc++.h>#define fi first#define se secondusing namespace std;const int N = 50原创 2018-04-13 17:09:12 · 332 阅读 · 0 评论 -
Educational Codeforces Round 12 F. Four Divisors (pcf)
题意:问[1,n]中多少个数有四个因子思路:算到n之前有多少个素数,有个Meisell-Lehmer算法,wiki上有解释,但是是全英文,有点看不懂,所以只能先搞个板子了。。。 从这里看到的板子 板子题HDU 5901 对于有四个因子的数,必然是p^3或者p*q的形式(p,q皆为质数) 对于p^3很好处理,p*q的形式则直接套板子即可 这个板子目前发现有两个用处,一个是lehmer_pi原创 2018-04-20 15:42:18 · 269 阅读 · 0 评论 -
Codeforces Daily (Round 370-410)
—————————————————————————-时间:8.1 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;am原创 2019-04-11 19:52:11 · 370 阅读 · 0 评论 -
Codeforces 85D. Sum of Medians (线段树)
题意: 三种操作,1.加入一个数,2,删除一个数,3,询问经过排序以后,所有下标mod5mod5mod5余3的数的和思路: 注意到,当我们加入一个数以后,会让所有后面的数后移一位,删除会使得后面全部前移一位,每次移动都使得下标变化1,所以我...原创 2018-07-20 16:45:41 · 523 阅读 · 0 评论 -
Codeforces Round #104 (Div. 1) E. Lucky Queries (线段树)
题意: 长度为n的47串,两种操作,一种是区间变换,即4变7,7变4,一种是询问,问最长的非严格递增子序列长度思路: 线段树维护即可,47可以抽象成01串,变换就是异或,存储全0串最长长度,全1串最长长度,000..111串长度,111…0...原创 2018-07-20 13:41:01 · 448 阅读 · 0 评论 -
NEERC 17 G The Great Wall (treap)
题意:&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 给你一个数列,每个点有abc三个值,现在让你画两个区间x,y,区间大小为r,区间不可以完全重合,当一个点没有被区间覆盖时值为a,被一个区间覆盖时值为b,两个区间为c,问第k小的数列数值总和为多少思路:&nbsp;&nbsp;&nbsp;&nbsp; &原创 2018-07-13 11:19:27 · 587 阅读 · 0 评论 -
NEERC 17 I Interactive Sort (交互题)
题意: 给出1到n这n个数的任意一个排列,然后奇数按顺序分到o数组,偶数按顺序分到e数组,你每次可以询问e数组中第i个和o数组中第j个的大小情况,查询结束后输出结果,查询次数最多30 000次,n≥1000n≥1000n\ge1000思路: 我...原创 2018-07-12 14:04:30 · 575 阅读 · 0 评论 -
NEERC 17 L Laminar Family (树链剖分)
题意: 给你一颗树,每次选取一个路径,把路径上的所有点加入到一个集合里面,问最后的集合是否两两之间满足 A∈BA∈B A\in B 或者B∈AB∈AB\in A或者A∪B=∅A∪B=∅A\cup B = \emptyset思路: 我们发现,如果最后是符合条件的,那么必定是一个集合被另一个集合...原创 2018-07-12 08:19:11 · 413 阅读 · 0 评论 -
Codecraft-18 and Codeforces Round #458 E. Palindromes in a Tree(点分治)
题意:&nbsp;&nbsp;&nbsp;&nbsp; 一棵树,每个点都有一个字母,如果一条路径的字符的某个排列是回文串,就称这个路径是回文的,问经过每个点的回文路径有多少条思路:&nbsp;&nbsp;&nbsp;&nbsp; 很明显的点分治。首先因为字母是a到t,所以可以状压一下,利用异或来改变路径的状态,如果二进制中1的个数小于等于1,那么就是回文的(利用__bu原创 2018-06-14 13:02:30 · 251 阅读 · 0 评论 -
Codeforces Round #466 (Div. 2) F. Machine Learning (带修莫队)
题意: 一个数组,问某个区间里面,第一个没出现的所有数出现次数的出现次数正整数思路: 题意有点毒,第二次才读对。一读题就觉得,带修莫队就可以处理了,然后我们发现需要离散化,那么我们干脆在之前就把数字离散了,因为有修改,所以最多为2e5个数,这样就很好处理了。因为是出现次数的出现次数,所以最多...原创 2018-05-24 20:13:09 · 177 阅读 · 0 评论 -
Codeforces Round #336 (Div. 1) D. Power Tree(dfs序线段树)
题意:思路: 首先,直接模拟很不现实,只能先离线,造出空树,再慢慢更新树 那么现在想一下怎么维护这颗树,首先,我们算每个点对根节点的贡献,发现每个点的贡献可以表示为vi∗sz1∗sz2∗...∗v_i*sz_1*sz_2*...*(其中sz1,sz2是这个点和根节点的路径上的点,这些点的直接儿子),只要我们新加入一个节点,假设父亲的直接儿子节点个数为sz,那么这次修改就是把它父亲原创 2018-05-08 19:31:26 · 312 阅读 · 0 评论 -
Codeforces Round #446 (Div. 2) E. Envy (并查集)
题意:思路: 根据题目分析出这样结论:最小生成树各个值形成的森林是确定的,所以各个值之间互相独立,那么我们就可以对于某个值进行这样的分析,将边权值小于这个值的边都加进去,然后开始讨论这个值,如果发现这个值里面某个边所连接的两边属于同一集合,那么这个边是不可行的 那么现在还需要讨论一种问题,就是虽然两个边单独说的话都可行,但他们放一起就不可行了,这个时候,我们只需要对每个集合单独讨原创 2018-05-04 20:57:30 · 209 阅读 · 0 评论 -
Codeforces Round #348 (div 2) D - Little Artem and Dance
题意:n个人围一圈,第一种操作所有人移动,第二种相邻位置交换(比如原标号为1的地方和原标号为2的人交换),输出交换后的情况思路:暴力处理1和2的移动情况,就能知道奇偶的变化值错误及反思:代码:#include<bits/stdc++.h>using namespace std;int n,q;int ans[1000100];int main(){ long long mo1=1;原创 2017-11-13 21:18:59 · 296 阅读 · 0 评论 -
Codeforces Round #348 (div 2) C. Little Artem and Matrix
题意:n*m的矩阵,进行三种操作,第一种把某一行整体左移,第二种某一列上移,第三种把变化前的一个点改变数据思路:错误及反思:代码:#include<bits/stdc++.h>using namespace std;pair<int,int> now[110][110];int ans[110][110];int main(){ for(int i=0;i<110;i++)原创 2017-11-13 21:15:20 · 252 阅读 · 0 评论 -
Codeforces Round #348 (div 2) B - Little Artem and Grasshopper
题意:一个1*n的格子,每个格子通向左或者右的x个格子,问能不能走出去思路:错误及反思:代码:#include<bits/stdc++.h>using namespace std;const int maxn =100010;int n;char a[maxn];int b[maxn];bool did[maxn];int main(){ scanf("%d",&n);原创 2017-11-13 21:09:52 · 222 阅读 · 0 评论 -
Codeforces Round #340 (Div. 2) E - XOR and Favorite Number (莫队算法)
题意:给你n个数,m个查询,每个查询问你一个区间里面,连续的数的异或值恰好为k的区间有多少个思路:莫队算法 如果我处理出前缀的异或,那么我ai^aj(i>j)的值,就是 aj+1{a_{j+1}} ^aj+1{a_{j+1}}^aj+3...aia_{j+3}...a_{i}的值。当我修改区间的时间,多一个值aia_{i},那么就相当于之前区间的答案加上cnt[k^aia_{i}],其他的也相似,原创 2017-10-28 19:48:44 · 258 阅读 · 0 评论 -
Codeforces Round #436 (Div. 2) C. Bus
题意:现在一个巴士在两个地点(0和a)往返,从起点到对面或者从对面回来都叫做一次旅程,这个巴士初始有b升油,没前进一个单位就消耗一个单位的油,现在两点之间只有一个加油站位于f,巴士可以在加油站直接加满油,现在要k次旅程,问最少加几次油思路:贪心就好了,不过在最后一次旅程的时候要特判一下错误及反思:1 WA。因为有段代码是复制粘贴,结果后面要改代码,却只改了一处代码,还稀里糊涂的过了样例。。。代原创 2017-09-26 13:34:22 · 295 阅读 · 0 评论 -
Codeforces Round #436 (Div. 2) D. Make a Permutation!
题意:现在有n个数字(大小从1-n),要你改变其中一些数字,使得1-n都只出现一次,在保证改变次数最小的情况下,输出字典序最小的情况思路:我们可以用一个数组b表示某个数字出现的个数(例如2出现了3次,则b[2]=3),那么,我们可以通过扫一次b数组,就能得知我需要填入的数字,可是,而我从1-n地扫,就能保证我在改变原数组时候供我填入的数字是目前最小的,然后我们就可以开始扫原数组了。如果原数组当前原创 2017-09-26 13:47:34 · 245 阅读 · 0 评论 -
Codeforces Round #436 (Div. 2) E. Fire(背包DP+输出路径)
题意:现在着火了,你要保留物品,每个物品有三个值t,d,p,t是解救需要的时间,d是过了多少秒这个物品就烧没了,p是物品价值,问保留物品最大的价值是多少,有多少个,分别是哪几个?思路:很明显的DP,而且总是觉得在哪里见过。dp[i]表示到时间为i为止,所能取得的最大价值,转移方程:dp[j]=max(dp[j],dp[j-a[i].t]+a[i].p),有点类似于背包,只不过这里放的是时间。还有一点原创 2017-09-26 14:00:19 · 292 阅读 · 0 评论 -
Codeforces Round #437 (Div. 2)E. Buy Low Sell High(优先队列)
题意:给你n个数字,现在你可以有以下的操作,买一个数字,再在之后卖出去,问最多能赚多少钱思路:对于一个数字,如果之后的的数字如果比这个数字还大,那么我们可以当作之前买了一个,然后现在卖出去,可是这样的做法存在问题,比如1,2,3,66,按照那样的做法,我们的收益是2-1+66-3=64,然而66-1+3-2=66,很明显之前的做法存在错误,错误的核心在于对于买卖对象确认的错误 那么,如果我们把之前原创 2017-09-30 19:58:35 · 449 阅读 · 0 评论 -
Codeforces AIM Tech Round 3 (Div. 2)(A-D 未完)
A. Juicer题意:现在给你n个数,如果大于b,那就扔掉,否则加进去,如果加进去的和大于d,就清空一次,问清空次数 思路:简单模拟代码:#include<bits/stdc++.h>using namespace std;int n;long long m,k;int main(){ scanf("%d%I64d%I64d",&n,&m,&k); int times=0原创 2017-08-22 20:15:26 · 252 阅读 · 0 评论 -
Codeforces Round #249 (Div. 2 Only)(A-E)
A. Queue on Bus Stop题意:现在有n个队伍,每个对于有ai个人(1思路:简单模拟代码:#includeusing namespace std;int n,m;int main(){ scanf("%d%d",&n,&m); int bef=0,ans=1; for(int i=0;i<n;i++){ int temp;原创 2017-08-06 17:43:16 · 281 阅读 · 0 评论 -
Codeforces Round #411 (Div. 2)(A-D 未完)
A. Fake NP题意:给你一个a,b,求a到b之前所有数出项最多的公共因子 思路:如果ab相等就是本身,不相等是2代码:#includeusing namespace std;int n,m;int main(){ scanf("%d%d",&n,&m); if(n==m) printf("%d\n",n); else原创 2017-08-07 17:03:59 · 217 阅读 · 0 评论 -
Codeforces Round #FF (Div. 2)(A-D 未完)
A. DZY Loves Hash题意:给你n个数字,对他们进行hash,hash的具体操作就是就是把他们放到m个数组里面,比如x放到第x%m+1个数组里面,问是否会有冲突,有输出第几个最先出现冲突,没有输出-1 思路:简单模拟代码:#includeusing namespace std;int a[310];int main(){ int n,m; sca原创 2017-08-08 16:10:54 · 270 阅读 · 0 评论 -
Codeforces Round #403 (Div. 2)(A-E 未完)
A. Andryusha and Socks题意:现在有n对数字,每次拿出一个数字到桌子上,如果这个数字以前就出现过,就把当前数字和以前数字都都拿走,问桌子上最多有多少种袜子 思路:简单模拟代码:#includeusing namespace std;int n;int a[100010];int main(){ int ans=0; int maxn=-原创 2017-08-16 14:51:51 · 272 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) F. Ann and Books (莫队算法+离散化)
题意:给你一n个数字,其中有的是第一类,有的是第二类,接着是m个查询,问你某个区间内,连续的子区间的第一类的和减去第二类的和恰好为k的子区间一共多少个。思路:莫队算法及离散化。这个题不是一般的毒,卡logn。 首先对于这个题目,只查询不修改,很容易想到莫队算法。首先处理出前缀和,那么我val[i]-val[j]就能表示aj+1+aj+2+...+ai{a_{j+1}+{a_{j+2}+...+{a原创 2017-10-28 23:15:45 · 365 阅读 · 0 评论 -
Codeforces Round #437 (Div. 2) B. Save the problem!
题意:给你一个数字A,要你给出一个价格和一堆硬币种类,要让这些硬币组成这个价格的方案数为A思路:想了很久没想出来,答案是除了A是1的时候,价格都是2*(A-1),硬币只有1和2,因为,你用(A-1)个2元0个1元,然后是(A-2)个2个1元,这样方案数就相当于A-1减到0,共A种,真的有点巧妙。。。错误及反思:其实自己写个完全背包打表也许能看出规律吧,可惜完全没往这个方向想代码:#include<b原创 2017-10-01 20:21:11 · 536 阅读 · 0 评论 -
Codeforces Round #348 (div 2) A. Little Artem and Presents
题意:给一个送礼,一共n个礼物,一次送的数量随意,但是相邻两次不能相同,问最多送几次思路:错误及反思:代码:#include<bits/stdc++.h>using namespace std;int main(){ long long n; scanf("%I64d",&n); long long ans=(n/3)*2; if(n%3) ans++;原创 2017-11-13 21:06:34 · 216 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) D. Olya and Energy Drinks (bfs)
题意:给你一张地图,其中只有’.’和’#’,’.’能走,’#’不能走,你一步最多走k个格子(不能翻越’#’)现在要从某个点走到另一个点,问至少几步就能走过去思路:理论上的bfs复杂度是理论上最差是100031000^3,但是经过一些细节上的优化和剪枝以后,就能ac了,我的剪枝是,遇到终点立刻结束bfs,遇到’#’立刻结束当前方向的搜索,同时,只有当某个点其他方向可以继续搜索,那么才把他加入到队列里面原创 2017-10-31 16:21:19 · 278 阅读 · 0 评论