
ACM_刷题
Rotepad
语言表述能力不行,在前面解释的不清,但是在代码中基本上每一个难懂的语句都在旁边有注释进行解释。
因为个人习惯带着代码去看题解,所以习惯把题解切入代码中,所以希望大家不要看到没什么解释就不看了,实际上后面的代码写的很详细
展开
-
Codeforces - 66D - Petya and His Friends(数论质数+思维)
题目:Little Petya has a birthday soon. Due this wonderful event, Petya's friends decided to give him sweets. The total number of Petya's friends equals ton.Let us remind you the definition of the g...原创 2019-08-05 02:27:56 · 332 阅读 · 0 评论 -
POJ-1149-PIGS(网络流最大流+神奇的建图)
题目:戳戳戳题意:有N个顾客,有M个猪圈,每个猪圈有一定的猪,在开始的时候猪圈都是关闭的,顾客来买书,顾客打开某个猪圈,可以在其中挑选一定的猪的数量,在这个顾客走后,可以在打开的猪圈中将某个猪圈的一些猪牵到另外一个打开的猪圈,然后所有的猪圈会关闭,这样下一个顾客来了继续上面的工作第一行是两个整数:M和N(1≤M≤1000,1≤N≤100)M是猪圈的数目,N是顾客的数目第二行是M个整...原创 2019-08-10 20:24:29 · 251 阅读 · 0 评论 -
POJ - 1273-Drainage Ditches (网络流--最大流模板题)
题目:戳我呀题解:网络流最大流模板题,想了解网络流模板可以去这里学习一下代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<set>#include<queue>#include<ve...原创 2019-08-10 20:26:55 · 197 阅读 · 0 评论 -
ZOJ - 2532 - Internship(网络流)
题目:ZOJ-2532题意:CIA公司想采用新技术升级网络,在实验测试阶段,他们想升级其中的一段网络以便观察新技术在多大的长度上提升网络的性能,你作为实习生的任务是调查那一段网络能提高CIA总部的宽带。题解:一种比较好想到的思路就是枚举每条边,将容量增加1,看这样最大流和之前的是否相等,但这样复杂度太高。 于是不妨换种思路,假设现在满流了,我们会考虑增加哪些边的容量呢?显然是满流...原创 2019-08-23 23:25:55 · 290 阅读 · 0 评论 -
CodeForces - 911C - Three Garlands(思维+xjb乱搞+与其它题解不同的做法)
题目:戳戳戳题意:一共有3盏灯,闪烁时间为分别k1,k2,k3,若开灯时间为x1,x2,x3,则第1盏灯在x1,x1+k1,x1+2*k1,x1+3*k1 . . . 的时候发光,问能否找到一组x1,x2,x3使得任何1秒都有亮光题解:(跟别的题解不一样)对于从max(x1,x2,x3)后的时间,每个时间点都是要选的,那么我们从其中max(x1,x2,x3)开始记为1节点,然后2...原创 2019-08-11 16:10:35 · 350 阅读 · 0 评论 -
2019-8.11早训(Codeforces 911A-B+887A-C)
Codeforces-911A代码:#include<bits/stdc++.h>using namespace std;int n,minn,l=0,ans;int a[100005];int main(){ minn=0x7fffffff; ans=999999; cin>>n; for(int i=1;i<=n;i++) { c...原创 2019-08-11 16:35:53 · 685 阅读 · 0 评论 -
Codeforces-734C-Anton and Making Potions(思维+二分)
题目:戳一戳题解:哎,当时真没想到会要二分啊,不过加深了自己对lower_bound跟upper_bound的理解,先找到直接生成的。然后通过暴力(结合二分)去求解。代码:#include<bits/stdc++.h>#define LL long long#define N 200005using namespace std;int m,k;LL n,x,s,...原创 2019-08-11 20:13:46 · 205 阅读 · 0 评论 -
HDU - 3416 - Marriage Match IV(网络流+最短路Dij)
题目:HDU-3416题意:有t组数据,n个点,m条边的图。从s走到t点,只走最短距离,每条路只能走一次。问走最短路总共有多少种方案题解:先用最短路算法求出从起点到各点的距离dist,然后根据dist的值建立新的图,边权为1,套用Dinic模板求起点到终点的最大流即可。但是这里最短路算法最好用SPFA遍历所有边才好,如果用Dij+优先队列需要把vis[i]的访问标记删掉,因为这是求从s到x...原创 2019-08-20 19:34:34 · 209 阅读 · 0 评论 -
POJ - 1815 - Friendship(网络流-拆点建图)
题目:POJ-1815题意:在一个给定的无向图中至少应该去掉几个顶点才干使得s和t不联通。题解:假设s和t直接相连输出no answer。把每一个点拆成两个点v和v'',这两个点之间连一条权值为1的边(残余容量)v和v''各自是一个流进的点。一个流出的点。依据求最小割的性质。权值小的边是可能被选择的(断开的)。加入源点st=0和汇点en=2*n+1,源点与s连权值为in...原创 2019-08-24 23:40:43 · 347 阅读 · 0 评论 -
Gym - 101466E -Text Editor(hash+二分)
题目:Gym - 101466E题意:两个字符串a,b,一个整数n。要求在b中找前缀,其中该前缀在字符串a中至少出现过n次,求最长前缀是多少题解:对于前缀的长度我们可以二分答案(仔细想想),当前前缀长度mid可以,那么l=mid+1,ans=mid,如果不可以则r=mid-1,从而找到该长度,但是对于每一个mid我都需要找当前mid长度的前缀出现多少次,那么肯定会T,那么这里就需要一个字符...原创 2019-08-12 23:46:27 · 248 阅读 · 0 评论 -
BZOJ-1797-Mincut 最小割(网络流最小割+联通块Tarjan)
题目:BZOJ-1797题解:关于最小割可以去这里看一下,对话形式的解释,讲的挺清楚的。对于本题:1.最小路劲的切断方案:就是指最小割,包不包括这条边就是指最小割的方案中有没有一个包含这条边2.通络流大小==最小割大小,一个网络流值对应多种最小割方案3.Dinic算法跑完后求出网络流值,会把图中所有的满流的边删掉,最小割一定是由满流的边组成,但不是任意的几个满流的边都能4.组成最小...原创 2019-08-13 17:43:40 · 254 阅读 · 0 评论 -
Codeforces-1199D-Welfare State + HDU-4306-Gorgeous Sequence(线段树)
Codeforces-1199D-Welfare State:There is a country withnncitizens. Theii-th of them initially hasaiaimoney. The government strictly controls the wealth of its citizens. Whenever a citizen makes ...原创 2019-08-01 17:00:38 · 442 阅读 · 0 评论 -
Gym - 101972J - Even Numbers(组合数+规律)
题目:Yousef loves playing with functions in his free time. Today, he invents the following function:Yousef will give you a list of queries, and you need to find the answers for them. For each quer...原创 2019-08-06 00:22:20 · 274 阅读 · 0 评论 -
Gym - 101972H - Beautiful Substrings(思维)
题目:传送门代码:#include <bits/stdc++.h>using namespace std;int main(){ int T; scanf("%d", &T); while (T--) { char a[100005], b[100005]; int aa, bb, c; ...原创 2019-08-06 00:40:01 · 233 阅读 · 0 评论 -
Gym - 101972K - Cyclic Shift(字符串匹配)
题目:戳一戳题意:a b两个字符串,对于a, b 中不匹配的位置,能否通过滚动的方式把他们进行匹配题解:将a字符串中不匹配的位置中的子序列提出来然后在原来的子序列后面再加一遍,那么就可以把b中不匹配的子序列跟这个a的新子序列进行匹配了以后做字符串相对位置不变,判断匹配的问题,可以把原来的s=s+s,这样进行匹配!代码:#include<iostream>#inc...原创 2019-08-06 00:59:35 · 285 阅读 · 0 评论 -
Gym - 101972G - Minimax(DP)
题目:戳一戳题意:一个n*m的矩阵,用一行一列把矩阵分成4个部分,在这四个子矩阵中每个都有最大值,求这个四个最大值中的最大值减去最小值尽可能小,求最小的题解:从四个角开始DP,a1[i][j] 表示从第 i 行到第 1 行,从第 j 列到第 1 列的子矩阵中的最大值,以此类推,然后枚举第i行第j列进行删除,查询四个角的最大值,求出最大的与最小的,然后选择(最大-最小)的值最小的,代码写的很...原创 2019-08-06 01:12:36 · 270 阅读 · 0 评论 -
CodeForces - 438D - The Child and Sequence(线段树+取模操作)
题目:At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at him. A lot of important things were lost, in particular the favorite sequence of Picks.Fortun...原创 2019-08-06 01:49:39 · 171 阅读 · 0 评论 -
POJ-2186-Popular Cows(Tarjan求强连通分量+缩点)
Popular CowsTime Limit:2000MS Memory Limit:65536K Total Submissions:43129 Accepted:17543 DescriptionEvery cow's dream is to become the most popular cow in the herd. In a he...原创 2019-08-01 22:49:51 · 169 阅读 · 0 评论 -
HDU-5927-Auxiliary Set(树上DP+xjb操作)
Given a rooted tree with n vertices, some of the vertices are important.An auxiliary set is a set containing vertices satisfying at least one of the two conditions:∙∙It is an important vertex∙∙I...原创 2019-08-08 20:25:29 · 234 阅读 · 0 评论 -
CodeForces - 721D - Maxim and Array (贪心+优先队列)
题目:Recently Maxim has found an array ofnintegers, needed by no one. He immediately come up with idea of changing it: he invented positive integerxand decided to add or subtract it from arbitrary...原创 2019-08-09 00:24:31 · 264 阅读 · 0 评论 -
Gym - 101466C - Planet Communcation(向量法+gcd+(hash or map) )
题目:Gym - 101466C题意:给定一个标准点坐标跟其他n-1个点的坐标,问从标准点最少射多少条线能把所有点都通过一遍题解:用向量,找三个数的gcd:,然后除以gcd得到类似一个单位向量的,然后再hash判断当前的hash对应有多少个,本来想用set的,结果不会搞,后来发现map,vector可以直接判重:vector<pair<pair<double,do...原创 2019-08-13 00:13:25 · 287 阅读 · 0 评论 -
Gym - 101466J -Jeronimo's List (桶排序)
题目:Gym - 101466J 代码:#include<bits/stdc++.h>using namespace std;const int N=3e7+10;const int MOD=3e7;int n,m,q,maxx=-1,num=0;int a[N],b[N],c[N];int main(){ memset(b,0,sizeof(b)); sc...原创 2019-08-13 00:24:34 · 192 阅读 · 0 评论 -
POJ - 2503 - Babelfish(hash算法水题)
题目:POJ-2503题意:字典中的单词对于不同的类别,求给定的单词的类别题解:直接hash,但是输入真的很毒瘤。。。。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#includ...原创 2019-09-18 09:32:32 · 729 阅读 · 0 评论 -
POJ - 2513 - Colored Sticks (绝世好题:字典树+欧拉路+并查集)
题目:POJ - 2513题意:一些木棒,两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。思路 : 这个题的话就比较麻烦,不过倒也好理解,有并查集,字典树来保存字符串集合,用图论(欧拉路)知识来解决就可以了,这个题如果把木棒看成一条边,木棒一端具有相同颜色的看成同一个点,因此可以转化成一个图中判断能否一笔画,就是给你一个无向图,让你判断是否存在...原创 2019-09-19 15:40:13 · 242 阅读 · 0 评论 -
POJ - 2777 - Count Color (线段树二进制区间染色)
题目:POJ-2777题意:给出n的长度的木棒,初始的颜色都为1,给出num中颜色,给出m个操作, C l r x 将l到r内的所有颜色更改为x , P l r 问在l到r内有多少种颜色题解:初始化肯定都是颜色1,就表示只有一种颜色,然后每次更新颜色时,取这个数的a[x]=1<<(Item-1),a[x]中的1的位置就表示每个颜色的位置,那么这样或过去就可以查找出有多少种颜色了...原创 2019-09-22 16:11:11 · 379 阅读 · 0 评论 -
POJ - 2750 - Potted Flower (环形线段树+区间连续线段树)
题目:POJ - 2750题意:给出一个含有N个结点的环,编号分别为1..N,环上的点带有权值(可正可负),现要动态的修改某个点的权值,求每次修改后环上的最大连续和,但不能是整个序列的和(不能是一个圈)题解:线段树维护区间连续最小值,最大值,区间连续最大和,最小和。这个题目帮我搞懂了关于区间连续的线段树,之前一直疑惑左子树中的从左开始最小值会不会不是左子树的第一个,实际上不是,推几个试...原创 2019-09-24 15:12:33 · 487 阅读 · 3 评论 -
POJ - 2828 - Buy Tickets(线段树逆序找空位)
题目:POJ - 2828题意:n个人插队的问题,每个案例给出n,代表有n个插队的,每个给出p,v,意思是代号为v的人插在了第p个人的后面,问最后的队伍的排列题解:对于这个题目,我们用线段树维护空位,一共有n个空位,那么第n个人一定是坐到了p+1个空位上,记录区间的左右子树空位个数,逆序从n开始处理,对于每个人他应该坐到第p+1个空位上,找到那个空位,并以空位的位置为下标记录这个人的编号...原创 2019-09-24 15:39:44 · 228 阅读 · 0 评论 -
POJ - 2886 - Who Gets the Most Candies? (线段树+反素数+找空位)
题目:POJ - 2886题意:有N个人参加一个游戏,每个人手上都拿了一张卡片,每张卡片的数字都是非0的,现在从第K人开始,第K人离开后,这时候根据第K人手上拿着的卡片的数字,决定下一个人是谁,如果这个数字m为正数,那么其实相当于向右数m个,如果这个数字为负数,那么其实相当于向左数m个数的位置(所有的数法都是要排除自己)。题解:1.由于i的约数的个数是可以求出的,也就是说只需要在N内找...原创 2019-09-24 16:02:11 · 175 阅读 · 0 评论 -
HDU - 3308 - LCIS (线段树区间合并)
题目:HDU - 3308题意:n个数字,q个操作,有两种操作:1.Q询问操作:在x,y区间内最长的连续递增子序列的长度。2,替换操作,把下标为x数替换为y.题解:线段树区间操作典型例题,跟POJ-2750很相似,加深了对区间操作的理解代码:#include<bits/stdc++.h>#define N 100005#define lson node<&l...原创 2019-09-26 15:38:00 · 270 阅读 · 0 评论 -
POJ - 2528 - Mayor's posters (线段树区间覆盖+离散化)
题目:POJ - 2528题意:n个人依次贴海报,给出每张海报所贴的范围li,ri 。求出最后还能看见多少张海报。题解:因为范围过大,所以我们考虑离散化,离散化之后把数组的下标作为线段树建树的区间,但是要注意:如下面的例子(题目的样例),因为单位1是一个单位长度,将下面的123467810—————...原创 2019-09-28 10:21:09 · 265 阅读 · 0 评论 -
ZOJ - 2301- Color the Ball(线段树区间染色+离散化)
题目:ZOJ - 2301题意:有无数多个球,每个球最初被染成了黑色,有n个操作,把从l到r的球染成黑色或者白色,问n个操作后,统计哪段区间白色最长。题解:这个题目跟POJ - 2528很相似,推荐先去做做这个题目,离散化操作,以离散化后的数组下标作为线段树的建树区间,但是这里要注意一下,不同于POJ-2528,那个题目要求的是最终有多少种颜色,不精确到具体区间,那么我只需要在间距大于1的...原创 2019-09-28 10:45:43 · 247 阅读 · 0 评论 -
POJ - 2002 - Squares (hash算法)
题目:poj-2002题意:给一些点的坐标,问最多可以构成多少个正方形。直接四个点四个点地枚举肯定超时的,不可取。普遍的做法是:先枚举两个点,通过数学公式得到另外2个点,使得这四个点能够成正方形。然后检查散点集中是否存在计算出来的那两个点,若存在,说明有一个正方形。但这种做法会使同一个正方形按照不同的顺序被枚举了四次,因此最后的结果要除以4.题解:已知: (x1,y1) ...原创 2019-09-18 09:24:58 · 360 阅读 · 0 评论 -
POJ - 3274 - Gold Balanced Lineup (hash)
题解:POJ - 3274 题意:题解:手推公式:num[i][1]+...+num[j][1]=num[i][2]+....+num[j][2]=num[i][k]+...+num[j][k];①num[i][1]+...+num[j][1]=num[i][k]+...+num[j][k];②sum[i][k]=sum[i-1][k]+num[i][k];①,②=...原创 2019-09-18 09:07:01 · 198 阅读 · 0 评论 -
HihoCoder - 1398 - 网络流五·最大权闭合子图
题目:HihoCoder - 1398题意:题目说的很清楚了,题解也给了,就是最大权闭合子图,也有证明(虽然我看不懂)题解:就讲一下最大权闭合子图的做法吧:引入闭合子图的概念 : 通俗点说就是选出一个图的子图,使得子图中的所有点出度指向的点依旧在这个子图内,则说明此子图是闭合子图。最大权闭合子图 : 假设每个点具有点权值,在一个图的所有闭合子图中,点权之和最大的即是最大权闭合子...原创 2019-08-21 23:37:33 · 206 阅读 · 0 评论 -
HDU - 4292 - Food(网络流-拆点建图)
题目:HDU-4292题意:有N个人,F种食品,D种饮料,接下来一行表示F种食品的数量,再下一行D种饮料的数量,接下来的N行F列表示N个人对F种食品的可以接受情况:Y为可接受,N为不可接受。再接下来N行D列表示N个人对D种饮料可以接受的情况,Y与N和上面的代表相同。问最多能满足多少人,一人任意一种可接受的一个食品和一杯饮料。题解:源点vs与每种食品建边,边权为当前食品的数量;每种饮料与汇点...原创 2019-08-22 00:53:23 · 164 阅读 · 0 评论 -
CodeForces - 851B - Arpa and an exam about geometry(平面几何)
题目:CodeForces - 851B题意:给你3个点的坐标,问能够通过旋转的方式,将a移到b的之前的位置,b移到c的之前的位置题解:这题WA了好多发,先是没考虑直线的情况,后来又是忽略了题意,是要把a移到b,b移到c,那么就是直接判断,ab距离是否跟bc距离相等了,再注意下成一条直线的情况代码:#include<bits/stdc++.h>using names...原创 2019-08-22 16:48:55 · 238 阅读 · 0 评论 -
CodeForces - 851C-Five Dimensional Points(平面几何+数学)
题目:CodeForces - 851C题意:一个5维坐标图中能够找到点a,点a满足与任意两个点b,c所成直线的夹角不为锐角题解:直接暴力枚举点,然后用arccos公式求得两直线所成夹角度数,具体方法可以去传送门看一下代码://Ö±½Ó±©Á¦£¬×¢Ò⻡¶Èת½Ç¶È #include<bits/stdc++.h>#define N 1005//#def...原创 2019-08-22 16:54:29 · 265 阅读 · 0 评论 -
CodeForces - 849A - Odds and Ends(思维)
题目:CodeForces - 849A 题意:给定一个序列,问能否将其划分为奇数个子序列,并且每个子序列都是奇数个,并且每个子序列的头尾元素都是奇数。题解:想复杂了。1. n个数,如果首尾为偶数,那么肯定不行2. n个数,有奇数段,每段有奇数个,那么肯定满足总数n也为奇数,这样的话就说明让他本身为一个序列就可以满足了,所以当首尾为奇数时,直接判断n是否为奇数就行代码:...原创 2019-08-22 16:59:19 · 246 阅读 · 0 评论 -
CodeForces - 849B - Tell Your World (思维+平面几何)
题目:Codeforces-849B题意:给出坐标为(i,y[i])的一系列点,问能否找到两条平行且不重合的直线,使得所有点都落在两条直线上,且每条直线上至少有一个点。题解:把问题转化一下,我们先算出两条直线的斜率k(由于两条直线平行,所以斜率相等),然后去找到两条直线最左下角的点作为基准点,检验其他点跟基准点之间的斜率是否为k即可。那么我们如何去算这个k呢,一个个去枚举第一个点去其他...原创 2019-08-22 17:03:52 · 254 阅读 · 0 评论 -
CodeForces - 855B - Marvolo Gaunt's Ring(线段树 or DP)
题目:CodeForces - 855B题解:1.用dp做的:dp[0][i]是前i个p*a[i]的最大值,dp[1][i]是在dp[0][i]的基础上加上q*a[i]的最大值,这样可以保证j>=i;dp[2][i]是在dp[1][i]的基础上加上r*a[i]的最大值,这样可以保证k>=j;2.用线段树做的:枚举中间的j,当p>=0的时候,查询(1,i...原创 2019-09-04 13:11:35 · 323 阅读 · 0 评论