![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
poj
文章平均质量分 80
johsnows
正在静下心来学算法的acmer
展开
-
poj 3096 Surprising Strings
题意:看题目示例领会Consider the string ZGBG. Its 0-pairs are ZG, GB, and BG. Since these three pairs are all different, ZGBG is 0-unique. Similarly, the 1-pairs of ZGBG are ZB and GG, and since these two p原创 2017-02-07 16:08:14 · 318 阅读 · 0 评论 -
poj 1125 Stockbroker Grapevine (最短路求最长距离)
Stockbroker GrapevineTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 33855 Accepted: 18707DescriptionStockbrokers are known to overreact to rumours. You原创 2016-08-02 21:52:28 · 1311 阅读 · 0 评论 -
poj 1860 (弗洛伊德水过)
Currency ExchangeTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 26472 Accepted: 9784DescriptionSeveral currency exchange points are working in our city原创 2016-08-02 21:42:42 · 508 阅读 · 0 评论 -
Finding Nemo POJ 2049(bfs+dp思想)
Finding NemoTime Limit: 2000MS Memory Limit: 30000KTotal Submissions: 8804 Accepted: 2069DescriptionNemo(现场转播节目) is a naughty(顽皮的) boy. One day he went into t原创 2016-08-01 18:44:19 · 411 阅读 · 0 评论 -
poj 2632 Crashing Robots(模拟)
Crashing RobotsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9977 Accepted: 4243DescriptionIn a modernized warehouse, robots are used to fetch the g原创 2016-07-28 11:02:19 · 369 阅读 · 0 评论 -
poj 1936 All in All
All in AllTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 31754 Accepted: 13179DescriptionYou have devised a new encryption technique which encodes a原创 2016-07-27 23:42:38 · 330 阅读 · 0 评论 -
poj 1068 Parencodings
ParencodingsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 24776 Accepted: 14582DescriptionLet S = s1 s2...s2n be a well-formed string of parentheses原创 2016-07-27 23:33:55 · 407 阅读 · 0 评论 -
poj 2533 Longest Ordered Subsequence
Longest Ordered SubsequenceTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 46180 Accepted: 20509DescriptionA numeric sequence of ai is ordered if a1 a2原创 2016-07-27 23:31:15 · 353 阅读 · 0 评论 -
poj 2728 Desert King(最优比率生成树)
题意:有n个点,要求一棵生成树使总height/distance最小,height为两点高度差,distance为两点间距离,输出最小的height/distance。解题思路:这题是01规划在最小生成树中的应用,我们按照01规划的方法不断求优化斜率,在更新斜率的时候用求最小生成树的做法去使height-l*distance(l就是斜率,即要求的答案)的值最大,然后更新l到不能原创 2017-04-07 08:23:52 · 366 阅读 · 0 评论 -
poj 2559 Largest Rectangle in a Histogram(单调栈)
题意:在二维坐标上,有n个相邻的矩形,每个矩形的宽为单位长度,高不相同,问能组成的最大子矩形面积。配合图片使用更佳:阴影部分即样例的最大矩形。解题思路:我们考虑每一个单位矩形,它能否以自己的高度和相邻的矩形组成一个新的矩形取决于旁边的矩形的高度是否不小于它,那么,我们如果能知道一个矩形左边第一个高度小于它的矩形的位置l,右边第一个高度小于它的矩形的位置r,那么我原创 2017-04-07 09:11:49 · 351 阅读 · 0 评论 -
poj 2155 Matrix (二维树状数组)
题意:一个初始为0的n*n矩阵,有m个操作,c为区间取反,q为单点查询解题思路:对于区间更新单点查询的题目,用树状数组是极好的,更新区间(a,b)我们update(a, 1), update(b+1, -1),然后查询的时候直接输出query(x)就是单点的值。这个题需要扩展到二维,其实解法类似, update(x1, y1, 1); update(x2+1, y1,原创 2017-04-07 22:09:56 · 287 阅读 · 0 评论 -
poj 2528 Mayor's posters(线段树)
Mayor's postersTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 62535 Accepted: 18059DescriptionThe citizens of Bytetown, AB, could not stand that the原创 2017-03-14 22:10:39 · 329 阅读 · 0 评论 -
poj 2886 Who Gets the Most Candies?(线段树+二分+反素数)
题意:n个小朋友围成一圈,每个小朋友有自己的名字以及一张卡片,卡片上的数字a代表在自己出列后想让自己右边第a个人下一个出列,如果a解题思路:暴力来的话是n^2的,由于n是5e5,所以肯定不行。我们可以用一个线段树维护一下区间内剩余的数的个数,然后我们通过转换a,把下一个要出列的人在当前剩下的序列里的编号求出来,然后我们去query这个编号在原序列上的位置,这时候就要二分一下原创 2017-05-29 23:54:20 · 319 阅读 · 0 评论 -
poj 3107 Godfather(树的重心)
dfs求树的重心。然后记得用前向星,用vector会t。然后就是又是惯例的poj过量测试,数组开大一点。代码:#include #include #include #include #define ps push_backusing namespace std;const int maxn=5e5+5;//vectoredg[maxn];st原创 2017-06-16 08:57:32 · 296 阅读 · 0 评论 -
POJ 1015 Jury Compromise (dp)
题意:有n件物品,每件物品有a价值,b价值,从其中选m件物品,使其总a价值-总b价值的绝对值最小,相等的情况下,总a价值+总b价值最大。解题思路:背包既视感,网上很多题解的做法是有问题的,而且那种知道会重复,然后再判断下去掉重复的做法确实很变扭,最后的避免重复的做法就是像01背包一样逆向转移。设dp[i][j]表示选取i件物品,价值差为j时,价值和的最大值,如果为-原创 2017-07-17 22:11:35 · 333 阅读 · 0 评论 -
POJ 1661 Help Jimmy
其实这道题感觉就是数字三角形问题翻版。设子问题为从当前这块板子走到地面需要的时间。每块板子只有左右两个方向走,所以对于以每块板子为起点的子问题有两个转移方向。每个方向能到哪个板子或是不能往下跳都是可以确定的,这个可以预处理一下。然后从高度最低的板子一次往上更新,就求出每个子问题了。最后算一下从起始点往下跳到的第一个板子是哪块就解决了。别忘了直接跳原创 2017-07-18 17:04:42 · 203 阅读 · 0 评论 -
poj 3259 Wormholes(spfa判断负环)
WormholesTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 43863 Accepted: 16107DescriptionWhile exploring his many farms, Farmer John has discovered a原创 2016-08-03 11:11:12 · 382 阅读 · 0 评论 -
POJ Snowflake Snow Snowflakes 3349 (最小表示法查同)
这道题用哈希做了好久,用哈希函数做的时候WA,用哈希表做的时候超时,最后用最小表示法查同的方法来做。最小表示法:从一个序列中找出以不同元素为起点组成的新序列中的字典序最小序列。设i=0,j=1,k=0;比较a[i+k]与a[j+k]的大小;当a[i+k]==a[j+k]时 k++;当a[i+k]>a[j+k]时,i=i+k+1; 因为从i->i+k开原创 2016-08-13 17:06:35 · 326 阅读 · 0 评论 -
poj 1703 Find them, Catch them(并查集)
题意:城市里有两帮犯罪团队,给你m条信息,D x y表示x和y不是同一帮,A x y是查询x和y的关系。解题思路:用带权并查集可以很好的解决这个问题,定义ran[i]为i与祖先节点的关系,0表示同帮,1表示不同帮。查询的时候如果两个点不在一棵树上,说明有节点的信息还没有给出过,那么不能确定两者之间关系,如果在同一棵树上而ran[x]==ran[y],那么说明他们是同帮,反之不同原创 2017-02-10 09:36:43 · 210 阅读 · 0 评论 -
poj 2492 A Bug's Life(并查集)
题意:有两种性别的bug,研究发现他们每个bug只和不同性别的人交流,给出一些bug之间交流记录,问这个研究是否正确解题思路:定义ran[i]记录i与祖先的关系,用带权并查集来存储bug之间的关系。如果交流记录里出现有两个bug在同一棵树上了,而且他们还是同一个性别,那么说明研究不正确,如果没有这样的两个bug,那么说明研究正确。代码:#include #in原创 2017-02-10 10:11:04 · 450 阅读 · 0 评论 -
POJ 1961 Period(KMP)
题意:在一段字符串的所有前缀中,找出有循环节的那些前缀,并分别求这些前缀的最大循环节数量。解题思路:用一下公式 循环节数=(i+1)/(i+1-next[i])(当(i+1)%(i+1-next[i])==0时)即可代码:#include #include using namespace std;const int maxn=1e6+5;char str原创 2017-02-13 14:43:05 · 568 阅读 · 0 评论 -
poj 3071 Football (概率)
题意:给一个n,有1思路:这题难度在于cooding,思路比较好想。我的做法是定义一个b[i][j]的数组,表示第j个人进入到第i轮的概率转移方程为: b[i][j]=b[i-1][j]*(a[i][k]*b[i-1][k]+a[i][k+1]*b[i-1][k+1]......)(k,k+1,k+2...为所有本轮可能面临的选手,比较难处理),最后找到第n-1轮中概率最大原创 2016-11-30 21:36:50 · 292 阅读 · 0 评论 -
poj 2065 SETI(高斯消元求模线性方程组)
题意:给出一个方程f (k) = ∑0aiki (mod p) always evaluates to values 0 每个字母代表一个f[k], a代表1,b代表2,以此类推,*代表0.让你求出ai并输出。思路:方程已经给出,直接建立方程,只要建立方程的过程没有写错,套用下高消求模线性方程组的模板即可,与poj 2947如出一辙,我直接套用那题的高消了,然后就过了。原创 2016-11-29 12:38:29 · 446 阅读 · 0 评论 -
poj 1487 Single-Player Games(高斯消元+字符串处理)
题意:给你几棵树,每棵树的叶子节点都有一个值或者其它树的期望,问每棵树走到叶子节点获得的值的期望是多少。每棵树的编号是从a到a+n-1.思路:被这道题,卡了好几天,快卡哭了QAQ。首先麻烦的是字符串的处理,用递归是一种比较好的办法,先记录下同一个括号里所存在的元素个数,再往下递归就好。然后建立方程。记a树的期望为Ea,把有确定值的叶子节点的期望求出来加和为va,以及求出走到原创 2016-11-28 21:38:50 · 340 阅读 · 0 评论 -
POJ 1019 Number Sequence (瞎搞)
题意:一串序列从1思路:先求出每个小序列分别用多少个数,然后确定m在什么位置,减去之前区间的所有位置,在在这个小序列里找就好了,找的时候貌似利用(int)log10(double(i))+1 这个公式会很简单,我做完才发现的QAQ。代码:#include #include #include #include using namespace std;lo原创 2016-09-20 16:38:28 · 332 阅读 · 0 评论 -
poj1850 Code (瞎搞)
题意:编码题,一个由小写字母组成的英文字符串,严格按字典序升序组成,长度最大为10,然后所有的字符串按字典序排序,依次编号,如 a:1 ,ab:27, abc: 352, 给你一个字符串,让你求它的编号,如果不符合要求输出0. 这题归类是组合数学题,我照例先自己想了想怎么做,也没有去想组合数学的做法。思路:1.首先应该求出第几位是什么字母时,小于等于这个字母有多少字符串,即原创 2016-09-13 11:19:43 · 314 阅读 · 0 评论 -
POJ 1080 Human Gene Functions(dp)
题意:两个字符串(基因序列),进行分值匹配, 不同字母(基因)匹配有不同分值,可以选择字母与'-'匹配,也有一定分值,最终要求小的字符串在用'-'填充之后去大的字符串长度相等,求总匹配分值最大.思路:和最大公共子序列的问题类似,用dp[i][j]表示到字符q[i]和字符p[j]时当前最大分数,dp[i][j]时可以有三个选择,1.让p[i]和'-'匹配,继承dp[i原创 2016-08-25 19:20:33 · 296 阅读 · 0 评论 -
POJ 1837 Balance(二维dp)
题意:一个天平,给n个不同长度(g[i])方向的钩子,m个不同重量(w[i])砝码,问有多少钟方法在使用了所有砝码后使得天平平衡.思路:一开始想的 以为钩子也要全部用上,这样就比较简单了,不需要考虑每个钩子情况,统一求正负钩子比例就好,但是交上去错的,去网上看了下才知道其实不用使用全部的钩子.用二维数组来记录状态,dp[i][j]i表示当前以挂上第i个砝码,j表示当原创 2016-08-24 15:21:21 · 350 阅读 · 0 评论 -
POJ 3009 Curling 2.0(深度优先搜索+剪枝)
题意:给一个图,由障碍和空地组成,一块石头可以在上面往一个方向滑动,只能沿着x,y方向滑动,并且那个方向上第一个地方不能是障碍物,石头滑动直到碰到障碍停止,并且消掉障碍物,或者滑出边界,这时候算游戏失败,给出起点和终点,问石头能否在十步之内到达终点,能的话最小步数是多少.思路:题目很简单,只需要模拟dfs就可以,注意走过的点可以重新走,因为图是在变化的,建图的时候可以全原创 2016-08-22 11:37:31 · 471 阅读 · 0 评论 -
POJ 2513 Colored Sticks (排序+并查集判断欧拉路)
题意:给一堆棍子,棍子由头尾两个字符串组成,棍子两两相连的条件是相接的部分字符串必须相同,问能否将这些棍子组成一条直线.解题过程:这题其实并不需要用字典树处理,用排序统计度数一样.一开始我想到保证度数为奇数的点的数量小于2就行了,但这样明显不可以,点数为1时就不正确.另外最重要的一点,当度数为奇数的点数量为0或2时,可以保证每条边都会被遍历且只有一次,但是,这样的图有可原创 2016-08-22 10:13:09 · 456 阅读 · 0 评论 -
POJ 2152 Check the difficulty of problems(三维dp)
题意:在一次比赛中,有t只队伍参赛,总共有m道题目,现给出每支队伍解出每道题的概率,问满足以下两条件的概率为多少条件1:每支队伍至少解出一道题目.条件2:夺冠的队伍至少解出n道题目.思路:首先用p[i][j]记录第i只队伍解出第j道题的可能性.这个题目每个队伍是一个情况,每个队伍在到第j到题为止解出k道题又是一种状态.所以应该用一个三维dp数组来记录状态原创 2016-08-20 21:25:40 · 385 阅读 · 0 评论 -
POJ 2002 Squares (哈希表)
题意:在二维坐标上给一堆不重复的点,问能组成多少个正方形.解题思路:一开始的方法是记录每条边的距离,找出相同距离的边,然后想办法判断这两条边是不是一个正方形的对角线,用叉积相乘等于零以及中点相等两个点来判断,这样做答案正确,但是明显超时,总共有50W条边,每找到一组重复边再去判断两两之间是不是满足关系,复杂度最坏的情况相当于O(N^3),可怕...然后换了一原创 2016-08-19 15:25:01 · 373 阅读 · 0 评论 -
poj 2478 Farey Sequence(基于素数筛法欧拉函数)
题意:求第n个farey 序列中元素的个数第n个farey序列中的元素为分子分母小于等于n,且不能约分了的分数。思路:第n个序列中,包含分母从2到n的分数,要求不能被约分的分数个数,可以分别求出2到n中每个数有多少个小于它本身与它互质的数,再加和即可。求小于n的与n互质的数最快的办法是欧拉函数,调用下即可。基于素数筛法求欧拉函数的原理:设a是n的质因原创 2016-11-01 15:27:23 · 356 阅读 · 0 评论 -
poj 2763 Housewife Wind(线段树+树剖)
将边的值转成深度大的端点的点值,然后就是树剖找lca通过dfs序把一条链的点映射到线段树上的区间去查询就好了。需要注意的一点是,传入线段树的是dfs序,但是线段数的操作不需要去管dfs序,直接根据传进来的参数做就行了,这是一个容易写错的地方。代码:#include #include #define MID int mid=(l+r)>>1;#define lson原创 2017-08-09 22:26:53 · 293 阅读 · 0 评论