
XCPC&CF&蓝桥杯_题解
ICPC+CCPC
重生之我是研究生
求知若饥,虚心若愚。
展开
-
Passing the Message HDU - 3410(单调栈模板题,简单应用)
题意:现在有n个人站成一行,告诉你每个人的身高。现在每个人都要找到在他左边,比他矮的人中最高的人的位置。同时也要找到,在他右边比他矮的人中最高的人的位置。注意由于他们是站成一行的,所以他们不能越过比他们高的人去看后面的人。也就是说,他只能看到他本人和他的左边(或右边)第一个比他高的人之间的那些人。请输出每个人左边比他矮的人中最高的人的位置,以及每个人的右边比他矮的人中最高的人的位置(没有的话输出0,位置从1开始)AC代码:#include <iostream>#i原创 2020-07-09 10:52:20 · 286 阅读 · 0 评论 -
Largest Rectangle in a Histogram HDU - 1506(单调栈模板,经典题型)
题目链接AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <map>#include <stack>#include <algorithm>//#define int long longusing namespace std;typedef long long ll;const int maxn=1e5+5;ll a[ma原创 2020-07-08 20:57:12 · 138 阅读 · 0 评论 -
Bad Hair Day POJ - 3250(单调栈模板)
题目链接AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <map>#include <algorithm>#define int long longusing namespace std;typedef long long ll;const int maxn=1e6+5;int s[maxn],tt=0,a[maxn];main()原创 2020-07-08 19:56:35 · 286 阅读 · 0 评论 -
Vasya and String CodeForces - 676C(尺取)
题意:河老师的新年礼物是一个长度为n的ab串,他想要找出最长的一个子串使得这个子串中每个字符都相等,他称之为“最优子串”。当然对河老师来说这个问题太简单了,于是他加了一个条件:他可以改变这个串中的某些字符,但一次只能改变一个字符,最多能改变k次。河老师想要知道,在可以对串进行改变的前提下,这个ab串的“最优子串”的长度是多少。题解:要么改变a,要么改变b.以改变b为例,可以改变k个字符意味着a字符总最多可以有b个字符,那么我们尺取时最多容忍k个b字符,然后用一个ans去维护记录尺取时的最大长度就可以了。原创 2020-05-22 14:20:11 · 196 阅读 · 0 评论 -
棋盘问题 POJ - 1321 (回溯入门,八皇后问题)
题目链接AC代码#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int manx=1e5+6;int n,k,ans=0,vis[1005];char g[1005][1005];void dfs(int r,int cnt) { if(cnt==k){ ans++; ret原创 2020-07-10 11:37:19 · 183 阅读 · 0 评论 -
Knight Moves POJ - 1915(BFS模板)
题目链接AC代码:#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <algorithm>#define int long longusing namespace std;const int dx[8]={1,1,-1,-1,2,2,-2,-2};const int dy[8]={2,-2,2,-2,1,-1,1,-原创 2020-10-02 19:33:38 · 171 阅读 · 0 评论 -
Substrings Sort CodeForces - 988B(sort()+s.find()函数应用)
水题,记录一下两个函数的使用。AC代码:#include <iostream>#include <string>#include <algorithm>using namespace std;string s[105];bool cmp(string a,string b){ if(a.size()!=b.size())return a.size()<b.size(); else return a<b;}int main(){ i原创 2020-05-26 19:00:16 · 263 阅读 · 0 评论 -
Letters CodeForces - 978C(水题,low_bound()函数使用)
水题,记录一下low_bound(*begin,*end,num),其中low-bound是指以num为下界,寻找第一个比num大或相等的元素的指针,通过减去*begin指针我们可以获得相应的下标。upper_bound( first, last, & val)算法返回一个非递减序列[first, last)中第一个 大于 val的地址。lower_bound( first, last, & val)算法返回一个非递减序列[first, last)中第一个 大于等于 值val的地址。.原创 2020-05-19 11:04:26 · 424 阅读 · 0 评论 -
水果 HDU - 1263 (map自动排序嵌套使用)
题目链接一个map相当于一维数组,两个map嵌套相当于二维“数”组,map默认先对key值排序,再对字面值排序。AC代码:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <map>#include <algorithm>using namespace std;const int maxn=1e6+5原创 2020-07-06 09:41:51 · 235 阅读 · 0 评论 -
Game of Robots CodeForces - 670B(水题low_bound()使用)
这题很水,简要记录记录一下low_bound()还有upper_bound()的用法。原博客lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的。在从小到大的排序数组中,lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。upper_bound( begin,e原创 2020-05-15 21:48:31 · 229 阅读 · 0 评论 -
Equal Sums CodeForces - 988C(map+pair应用)
题意:小A有 n 个整数数列 a1,a2,…an ,每个数列的长度为li。请你找出两个编号不同的数列,并从这两个数列中各恰好删除一个数,使得这两个数列的和相等AC代码(参考了大佬的博客):#include <iostream>#include <cstring>#include <cstdio>#include <map>#include <algorithm>using namespace std;const int原创 2020-05-26 19:55:59 · 170 阅读 · 0 评论 -
热血格斗场 计蒜客 - T1230 (map使用)
原题链接AC代码:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <map>#include <algorithm>using namespace std;const int maxn=1e6+5;int main(){ ios::sync_with_stdio(false); map<in原创 2020-07-06 11:51:51 · 319 阅读 · 0 评论 -
Equalize the Remainders CodeForces - 999D(set相关函数使用)
题意:给你一个大小为n的数组,m是n的一个divisor。每次可以对ai+1,问最少的次数让数组中的每个元素除m 的余数 从0到m-1 各有n/m个。题解:贪心思想如果余数要加,那么能加最少就加最少,我找出要加到最少的目标余数进而就可以的出这一次的操作次数,然后该元素也会做出相应改变。具体看代码。重点用到了三个我不会的set函数:set.rbegin()返回set中最大的元素,set.begin()返回最小元素,set.lowerbound(int x)二分返回大于等于x的第一个元素。AC代码:原创 2020-05-15 16:27:25 · 238 阅读 · 0 评论 -
Two-gram CodeForces - 977B(substr()函数使用)
水题,记录一下substr(int pos,int length)函数,第一个参数是截取的开始位置,第二个参数是截取的长度,是长度,是长度!!!!(因为刚开始记错了,WA了一发,啧啧啧)#include <iostream>#include <cstring>#include <cstdio>#include <cstring>#include <map>#include <algorithm>using namesp原创 2020-05-18 14:38:53 · 378 阅读 · 0 评论 -
Ice Skating CodeForces - 217A(并查集基本操作)
题意:给出n个点的坐标,如果两个点x相同或者y相同,则两点可以联通, 问你最少加几条线,能使全部点联通AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn=1e5+6;const int inf=0x3f3f3f;struct node{ int x,y;}a[原创 2020-07-10 19:22:50 · 263 阅读 · 0 评论 -
Codeforces Round #660 (Div. 2)1388C - Uncle Bogdan and Country Happiness (好题,条件判断,DFS)
贴个代码吧,其中有一个求以某一个结点为根的所有子节点权值和的操作,记录一下。另外,有个条件自己比赛的时候推错了,就是:假定:当前经过这一点的人数为y(快乐与不快乐人数之和),而这一点的快乐减不快乐人数之差是x,我们设快乐的人数为a,不快乐的人数为b,并默认a>b。然后我们得到 a+b=y,a-b=x推出x+y=2*a,所以说明像符合题意必须满足x+y是偶数。(比如人数为7,但是7能凑出的人数是有限的,4就不行,所以必定存在一个判断条件)AC代码:#include <iostre原创 2020-07-31 16:19:16 · 277 阅读 · 0 评论 -
Goldbach`s Conjecture LightOJ - 1259(素数筛模板题)
题意:n=a+b,满足a,b(a<=b)都是质数,求a+b=n方案个数。题解:模板题,有个坑点:bool数组1e7不会MLE,但是int会AC代码:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <queue>#include <algorithm>原创 2020-08-10 18:01:11 · 219 阅读 · 0 评论 -
Extended Traffic LightOJ - 1074(SPFA判负环模板应用)
题意:这一晚,TT 做了个美梦!在梦中,TT 的愿望成真了,他成为了喵星的统领!喵星上有 N 个商业城市,编号 1 ~ N,其中 1 号城市是 TT 所在的城市,即首都。喵星上共有 M 条有向道路供商业城市相互往来。但是随着喵星商业的日渐繁荣,有些道路变得非常拥挤。正在 TT 为之苦恼之时,他的魔法小猫咪提出了一个解决方案!TT 欣然接受并针对该方案颁布了一项新的政策。具体政策如下:对每一个商业城市标记一个正整数,表示其繁荣程度,当每一只喵沿道路从一个商业城市走到另一个商业城市时,TT 都原创 2020-08-10 21:39:07 · 148 阅读 · 0 评论 -
Candies POJ - 3159(差分约束模板题,优先队列优化Dijkstra模板)
题意:给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数, 意思是A的糖果数比B少的个数不多于c,即B的糖果数 - A的糖果数<= c 。 最后求n 比 1 最多多多少糖果AC代码:#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <algorithm>using namespace std;const原创 2020-08-11 19:31:49 · 186 阅读 · 0 评论 -
Divide by three, multiply by two CodeForces - 977D(dfs vector记录答案并利用vector回溯)
em.....虽然自己想到了dfs回溯解决这个问题,结果却咋实现记录答案但是如果答案不对也要回溯这个问题上翻了车。(原谅菜鸡我没有想到可以直接v.pop_back(),em...以前基本没用过这个功能,这里记录一下)AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <algorithm>using namesp原创 2020-05-18 17:17:50 · 243 阅读 · 0 评论 -
News Distribution(Codeforces 1167C) (并查集简单应用)
并查集查询时间复杂度是O(1),合并时间复杂度才是O(n)题意:n(人数),m(组数),m行,先输入k,表示这组有k个人,下面是k个人的编号,同组可以传递信息,问当第i个人是信息源时,有几个人知道信息。AC代码:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <vector>#include <algorit原创 2020-07-19 12:19:56 · 442 阅读 · 0 评论 -
hdu2767 Proving Equivalences(tarjan模板应用)
题意:给出n个点和m条边,问最少须添加多少个边,使得任意两点间能互通。给出的m条边是有向的。题解:先说结论:这是一个小题型(至少加几条边使得全图强连通),很多题目都是这样。我们只需利用tarjan求出连通块的入度为零的数量和出度为零的数量的最大值即可。原因简析:要想使得所有点联通,则只需把各个连通块用边连起来即可,所以我们要么是所有连通块的入度均不为零,要么解决出度均不为0(其实在解决...原创 2020-05-03 14:55:24 · 206 阅读 · 0 评论 -
HDU -1269 迷宫城堡(Tarjan模板题)
Problem Description为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只说明可以通过这个通道由A房间到达B房间,但并不说明通过它可以由B房间到达A房间。Gardon需要请你写个程序确认一下是否任意两个房间都是相互连通的,即:对于任意的i和j...原创 2020-05-02 12:54:10 · 265 阅读 · 0 评论 -
Summer Holiday HDU - 1827(tarjan缩点)
题目:听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在太耗时间和电话费了。他知道其他人也有一些别人的联系方式,这样他可以通知其他人,再让其他人帮忙通知一下别人。你能帮Wiskey计算出至少要通知多少人,至少得花多少电话费就能让所有人都被通知到吗?先解释一下缩点(反正我刚开始不知道啥叫缩点...原创 2020-05-04 15:57:38 · 402 阅读 · 1 评论 -
Cyclic Components CodeForces - 977E(找简单环)
先求连通块,再看是不是所有连通块的点的度数为2,如果是那就是简单环,只不过我觉得我这个代码时间复杂度还是挺高的,虽然这题没啥问题,不过我看有他人是一遍用dfs找环,一遍判断找到环时的那个点的度数是不是2。AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <algorithm>using namespace st原创 2020-05-18 20:13:53 · 318 阅读 · 0 评论 -
The Two Routes CodeForces - 601A(最短路模板)
AC代码:#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <queue>#include <vector>#include <algorithm>#define int long long#define IOS ios::sync_with_stdio(false);cin.tie(0);co原创 2020-08-07 19:20:17 · 185 阅读 · 0 评论 -
920. 最优乘车(BFS 流式输入)
H城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园。现在用整数1,2,…N 给H城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为1,S公原创 2020-11-02 19:38:11 · 404 阅读 · 0 评论 -
Railway HDU - 3394(tarjan应用)
题目:有一个公园有n个景点,公园的管理员准备修建m条道路,并且安排一些形成回路的参观路线。如果一条道路被多条道路公用,那么这条路是冲突的;如果一条道路没在任何一个回路内,那么这条路是不冲突的 问分别有多少条有冲突的路和没有冲突的路题解:1.一条边不在任何个环中等价于割边(桥) 2.一条边在多个环内等价于所有含多个环的双连通分量的边AC代码:#include&l...原创 2020-05-07 21:07:49 · 281 阅读 · 0 评论 -
Wormholes POJ - 3259(SPFA判负环模板)
题意:虫洞是很奇特的,因为它是一个**单向**通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500)条路径,W(1≤W≤200)个虫洞。FJ作为一个狂热的时间旅行的爱好者,他要做到以下几点:开始在一个区域,通过一些路径和虫洞旅行,他要回到最开时出发的那个区域出发前的时间。也许他就能遇到自己了:)。为了帮助FJ找出这是否是可以或不可以,他会为你提供F个农场的完整的图(1≤F≤5)。所有的路径所花时间都不大于10000秒,所有的虫洞都回到不大于10000原创 2020-08-10 15:46:18 · 166 阅读 · 0 评论 -
Books Exchange (hard version) CodeForces - 1249B2
题意:有 n 人, 每个人都正在读一本独一无二的小h书. 在每一天的结束的时候, 都会进行一次py交易,交易规则为:第 i 的人将给他的书给第 pi 的人 (如果i=pi,那么就是给他自己). 默认pi都是不同的数,是一个1到n的排列. 并且这个p是固定的,不随时间的改变而改变.例如, 如果 n=6 并且 p=[4, 6, 1, 3, 5, 2],那么第一天结束的时候进行了第一次py交易, 第1个人的书给了第4个人, 第2个人的书给了第6个人,依次类推.。第二天结束的时候,又进行了一次py交.原创 2020-05-29 13:30:52 · 396 阅读 · 0 评论 -
853. 有边数限制的最短路 bellman_ford算法模板
给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能存在负权回路。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。如果不存在满足条件的路径,则输出“impossible”。AC代码:...原创 2020-11-01 17:27:15 · 249 阅读 · 0 评论 -
Reachability from the Capital CodeForces - 999E(tarjan模板应用 )
题目:Berland有n个城市和m条路。 每条路连接两个城市, 所有路都是单向的。为了能从首都到达所有城市,需要建造的最少的新道路的数量是多少?新建的道路也是单向的em....其实就是说从这一点出发的“强连通”(联想一下之前做过的 最少添加几条边是这题变成强连通 模板,我们先对强连通分量缩点,找到入读为零的点的个数就行),这题跟以前那个题就是只要从源点出发可以到大所有点就行,那么我们在统计入度为零的点的时候只要不考虑源点所在的强连通分量就行了。AC代码:#include <i原创 2020-05-14 21:39:41 · 317 阅读 · 0 评论 -
最短路 HDU - 2544(最短路 Flyod模板)
题意:某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。(数据很小)AC代码:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>usi原创 2020-08-05 11:04:26 · 160 阅读 · 0 评论 -
Counting Cliques HDU - 5952(爆搜,dfs判断完全子图(团))
题意:一个有N个点M条边的图,球其中由S个点构成的团的个数。一个团是一个完全子图。题解:首先建图建有向图,使得较小的点指向较大的点,然后从小到大暴力枚举以当前点为一个团中最小的点的时候满足题意得团的个数,这样可以防止枚举重复。其次,每次判断该点加入是否仍然为团得条件是判断当前点是否与当前团内的所有点都有边(判断完全图的基本方法)AC代码:#include <iostream>#include <cstring>#include <cstdio>原创 2020-08-03 17:19:05 · 305 阅读 · 0 评论 -
Rumor CodeForces - 893C(并查集基本操作:维护连通块最值)
题目链接PS:这题也可以用dfs搜连通块,一遍搜一遍记录连通块的最值。AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#define int long longusing namespace std;const int maxn=1e5+6;int n,m,f[maxn],c[maxn];int find_x(int x)原创 2020-07-10 21:57:18 · 2900 阅读 · 0 评论 -
HDU 3478Catch(二分图判定+连通图判定)
题目大意:现在有一个逃跑的小偷,先给出一个城市的N个节点和M条边,问你是否有某个时刻*这个小偷可以站在这个城市的任意一个点,也就是在任意时刻他可能站在从0~N的任意一个节点上。题解:一.首先该图一定是联通图(如果不是的话,压根就无法到达全部的点) 判断联通图的话我们可以用并查集求连通块的数量并判断是否为一即可(ps:以前只知道用并查集求最小生成树,还有一些带权并查...原创 2020-05-02 21:22:49 · 334 阅读 · 0 评论 -
Road Construction POJ - 3352(tarjan双连通缩点模板)
题目描述:给一个无向连通图,至少添加几条边使得去掉图中任意一条边不改变图的连通性(即使得它变为边双连通图)#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn=1e5+5;...原创 2020-05-07 19:04:25 · 225 阅读 · 0 评论 -
HUEL_ACM第二学期第二周:扩展域并查集
A#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int N=1e6+5;int n,m;int p[N];int sum[N];int find(int x){ if(p[x]!=x)return p[x]=find(p[x]); return p[x];}int main()原创 2021-03-03 18:56:16 · 220 阅读 · 1 评论 -
Fox And Two Dots CodeForces - 510B(dfs判环)
说一个坑点:对于bool类型的dfs,有两种情况都是返回true的,一是这一层dfs中符合要求返回true,而是接下来的某层(dfs函数)符合要求返回true,二者缺一不可(在这个地方WA了好久,啊啊啊啊啊啊啊!!!!!!!!!!)AC代码:#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <queue>#include原创 2020-07-11 12:23:09 · 188 阅读 · 0 评论 -
Hawk-and-Chicken HDU - 3639(tarjan,重点说一下为什么要反向建图)
题意:大学班级选班长,N 个同学均可以发表意见 若意见为 A B 则表示 A 认为 B 合适,意见具有传递性,即 A 认为 B 合适,B 认为 C 合适,则 A 也认为 C 合适 勤劳的 TT 收集了M条意见,想要知道最高票数,并给出一份候选人名单,即所有得票最多的同学,你能帮帮他吗?这题没啥好说的,就是用tarjan把强连通分量缩点后寻找出度为零点点输出即可(当然这只是咱的第一反应),但实际...原创 2020-05-04 21:41:47 · 342 阅读 · 0 评论