ACM题解——梦想之路
主要是笔者自己做ACM历程上所做OJ题目的题解。涉及到数论、图论、搜索、动态规划、数学等算法。
不是因为看到希望了,才会去努力。而是因为努力了,才会看到希望。
加油吧~ACMer。希望喜欢ACM的朋友可以一起交流
ITCharge
高效率编程,慢节奏生活。
展开
-
HDU2132 An easy problem【水题】
题目大意:给了递推公式,如果当前i%3==0,则sum(i) = sum(i-1) + i*i*i;否则sum(i) = sum(i-1) + i。思路:因为数据略大一些,所以用__int64整型来存储结果。原创 2015-01-28 21:59:39 · 1606 阅读 · 4 评论 -
POJ2186 Popular Cows【Kosaraju】【强连通分量】
题目大意:每头奶牛都希望自己成为最欢迎的那头牛。给你N头牛,M个崇拜关系(A,B)。意思是牛A崇拜牛B。特别是,如果牛A崇拜牛B,牛B崇拜牛C,那么牛A也崇拜牛C。那么问题来了:请计算出被所有牛崇拜的牛的个数。思路:刚学的Kosaraju算法。考虑这道题,把崇拜关系(A,B)看做是一条有向边,并且,我们发现牛的崇拜关系具有传递性。那么只要牛A有一条路径连向牛B,就可以判定牛A崇拜牛B。于是,被所有牛崇拜的牛就是所有的点都存在一条路径连向它的有向路径。下边简述下Kosaraju算法:(1)对原图原创 2015-01-29 19:42:25 · 1247 阅读 · 0 评论 -
HDU2133 What day is it【水题】
题目大意:给你一个日期,先判断日期是否合法,不合法输出"illegal",继续下组数据输入。合法的话,计算出该日期是周几,然后输出相应星期的英文单词。参考日期是2007年11月17日是星期六。思路:按2007年11月17日来算太过繁琐,因为公元0001年1月1日是星期一,这样递推算到要计算的日期就变简单了不少。统计从1年1月1日到给出日期的总天数是多少,因为只需要计算星期,所以只要对7取余的值即可。用了数组来保存每月天数和星期的单词,简洁了不少。原创 2015-01-29 09:16:49 · 1631 阅读 · 1 评论 -
HDU2131 Probability【水题】
题目大意:输入一个字符ch和一个字符串s(无视大小写),求这个字符在字符串中出现的概率思路:用isupper函数判断字符ch和字符串s里的字符里是不是大写字母,如果是大写字母就全部转换为小写字母,判断并计算字符ch在字符串s里出现的次数,除以总字符就是概率。原创 2015-01-28 21:39:35 · 1333 阅读 · 0 评论 -
HDU2114 Calculate S(n)【数学】【水题】
题目大意:计算1~N的立方和思路:1~N的立方和公式为S(N) = 1^3 + 2^3 + 3^3 + … + N^3 = N^2*(N+1)^2/4。然后题目要求后四位,取余即可。原创 2015-01-28 21:17:37 · 1342 阅读 · 0 评论 -
POJ1734 Sightseeing trip【Floyd】【最小环】
题目大意:有个旅游公司要开发一条新的旅游路线,要求这条路尽可能短,但是又不能只包含两个城市,并且旅游途中不能回到之前去过的城市,只能去往下一个没去过的城市,旅游结束的时候要回到最开始的城市,要求求出整个旅游路线经过的城市。思路:给N个点,M条边建图。路程最短,且要形成环,其实就是求最小环问题。可以用Floyd来做。用Dist[i][j]存储从i到j的最短路径,但是 i != j,因为最少要有3个点(加上k至少3个点)。用pre[i][j]来表示从点i到点j的路径中j点前边的点。判定最小环时,点i到原创 2015-01-28 20:54:00 · 1119 阅读 · 0 评论 -
HDU2113 Secret Number【水题】
题目大意:求一个数各个位数上为偶数的和思路:注意输出格式。。。原创 2015-01-27 23:26:23 · 1261 阅读 · 2 评论 -
HDU2109 Fighting for HDU【水题】
题目大意:两个队PK,弱对弱,强对强,赢了得2分,平了得1分,输了木有分。输出最终得分对比。思路:。。。原创 2015-01-27 23:19:14 · 1507 阅读 · 0 评论 -
HDU2107 Founding of HDU【水题】
题目大意:求N个数的最大值。。。现在还做这么水的题我也是醉了原创 2015-01-27 23:09:18 · 790 阅读 · 0 评论 -
POJ3169 Layout【SPFA】【差分约束】
题目大意:奶牛喜欢站成一排吃饲料,有的奶牛喜欢靠在一起,他们最多距离D米远。有的奶牛不喜欢靠在一起,他们最少距离D米远才可以。给你一系列的约束条件,问:如果在上述条件下,奶牛站不成一排,则输出"-1",如果能站成一排,但是第1头牛~第N头牛的距离无限远,则输出"-2",如果满足条件,并且第1头牛~第N头牛之间存在实际距离,则输出第1头牛~到第N头牛之间的能达到的最远距离。思路:直接的差分约束系统,设牛u和牛v的位置为u和v。第1条:设牛u和牛v最多距离w米远,转换为:v - u <= w。第2原创 2015-01-27 22:54:59 · 1046 阅读 · 0 评论 -
HDU3440 House Man【SPFA】【差分约束】
题目大意:在一条直线上有N个房子,每个房子的高度不一样,一个超人可以将这N个房子左右移动,但是不能改变房子的相对位置。位置都为整数点。同一位置不能有两个以上的房子两个超人从最矮的房子开始,跳到刚好比他所在房子高的房子上去,一直这样跳,每次跳到的房子都比现在所在的房子高,而且每次跳的水平距离不能超过D米。问:如何将这些房子进行合理的摆放(不改变相对位置的前提下),使得超人能够经过所有的房子跳到最高的房子,又要使最矮的房子和最高的房子之间的距离最远?输入说明:第一行:先输入一个T,表示T组数据。原创 2015-01-27 20:23:50 · 1192 阅读 · 0 评论 -
HDU1534 Schedule Problem【SPFA】【差分约束】
题目大意:安排N个工作 ,给你N个工作的开始时间,共有4种安排方式(约束条件)。条件1:FAF a b,a要在b完成后完成。条件2:FAS a b,a在在b开始前完成。条件3:SAS a b,a要在b开始前开始。条件4:SAF a b,a要在b结束前开始。 给你一系列的约束条件。问:使其工作时间最小且满足所有约束条件的各个工作最早时间各是什么。如果不满足条件则输出"impossible"。思路:差分约束系统。设第i件工作的开始时间为t[i]。4个约束条件变成:条件1:FAF Sa + t[a原创 2015-01-27 14:27:02 · 1424 阅读 · 0 评论 -
POJ1201 HDU1384 Intervals【SPFA】【差分约束】
题目大意:给你N个整数点构成的区间[ai,bi](ai,bi都为整数),在区间[ai,bi]上最少选ci个点。ci可在区间[ai,bi]中随意取,但是不能重复。问:要满足在N个区间取点,至少要选多少个点。思路:差分约束思想。设Si为前i项的整数个数,则S(bi) - S(ai-1) >= ci。还有两个隐含约束条件S(i-1) - S(i) <= 0,S(i)-S(i-1) <= 1。把这三种约束构建一个差分约束系统,用SPFA求最短路径。原创 2015-01-26 23:52:33 · 1024 阅读 · 0 评论 -
POJ1364 HDU1531 King【SPFA】【差分约束】
题目大意:一个国王通过一个序列来做决定,他有几段段连续子序列的和的条件,知道各段子序列的和是大于还有小于某个数(这个数已知)。问:是否能找到这样的序列。转换一下,就是N个数组成一个序列,已知M段几个连续的数组成的子序列构成的不等式,求这几个不等式构成的不等式组是否有解。例如:序列{A1,A2,A3,A4,A5,…,An},有M个不等式,比如说:Ai + A(i+1) + A(i+2) + A(i+3) + A(i+4) + … + A(i+t) < Ki 或者是Ai + A(i+1) + A(i原创 2015-01-26 21:56:46 · 1031 阅读 · 0 评论 -
POJ 2449 Remmarguts' Date【SPFA】【A*】
题目大意:公主要求王子通过第k短的路径去找她。给出了N个点,M条单向边的图。也给出了起点s(王子所在的点)、终点t(公主所在的点)和k。问:K短路是多少。思路:第一次做K短路的题目。用的A*+SPFA来做的。下边简单说下这个算法。使用链式前向星存储图。安装下边步骤来做。(1)将有向图的所有边正向、反向分别存入两个不同的边集(Edges,Edges1)中。用反向边集,以所求终点t为源点,利用SPFA或Dijkstra求解出所有点到t的最短路径,用Dist[i]数组来表示点i到点t的最短距离。(2原创 2015-01-26 16:40:41 · 1368 阅读 · 0 评论 -
POJ3615 Cow Hurdles【Floyd】
题目大意:John想为农场的奶牛举办跳高比赛。奶牛们现在都累了,它们想尽可能的用最少的能量完成跳高,因为跳过低点的障碍不是很困难,但是高点的障碍就非常困难,所以奶牛只关心它要越过的障碍的最高高度。现在给你N个点,编号为1~N,在N个点之间有M个障碍,给你M个障碍链接的点编号和障碍高度,判断T组从点A跳到点B,尽可能使障碍高度低的路径上最高障碍物高度是多少。思路:把障碍的高度看做是边,那么题目意思就是给你N个点,M个单向边。问点A到点B能达到的最长边尽可能短的路径上最长边为多少。类似于求多源最短路原创 2015-01-25 21:43:07 · 1120 阅读 · 0 评论 -
POJ1125 Stockbroker Grapevine【Floyd】
题目大意:有N个股票经济人,他们之间可以传递信息,但是他们只相信他们认为可靠的人的信息。现在由某个人开始传信息,怎么能在最短的时间内让所有人都接收到消息。这个时间取决于最后一个人收到信息的时间。如果没有一个人能使所有人都接收到信息,则输出"disjoint",否则,就输出最短的时间和这个人的编号。思路:可以看做是N个点,M条单向边。建立一个图,然后用Floyd求多源最短路径。之后,遍历所有的结点,找到符合要求的那个人编号。不存在就输出"disjoint"。原创 2015-01-25 21:03:33 · 926 阅读 · 0 评论 -
HDU1874 畅通工程续【Dijkstra】
题目大意:给你N个点,M条双向边。再给你起点s和终点t,求点s到点t的最短路径。思路:求一对顶点之间的最短路径。用Dijkstra算法来做。这道题需要注意的几点:(1)注意重边情况;(2)注意s == t的情况,输出为0;(3)标记k的时候,初始化千万不能标记成0~N-1。原创 2015-01-25 17:50:28 · 995 阅读 · 0 评论 -
POJ1511 Invitation Cards【SPFA】
题目大意:给你N个结点和M条边。问:从结点1出发分别到2、3、4、…、N结点的路程以及从这些结点返回结点1的总路程和。思路:求源点到各结点的距离问题,用Bellman-Ford时间复杂度为O(N*M),这道题的数据规模是1000000,所以果断不行。我用了链式前向星(类似邻接表)存储图,因为要分别求出去时的最短总路程和回来时的最短总路程,所以用了二维的链式前向星,一个存正边,一个存反边,然后以结点1为起点,对正边做一次SPFA算法,再以结点1为起点,对反边做一次SPFA算法。看讨论区貌似有人用g原创 2015-01-25 11:03:14 · 1294 阅读 · 0 评论 -
HDU2103 Family planning【水题】
题目大意:小虎发明了一个计划生育方案:每对夫妇最多生M个孩子,超生的要罚款,但是在这M个孩子里,如果生了男孩,就不能再生了,否则超生的也要罚款。罚款的数额和超生个数有关,超生一个罚款10000元,超生第二个20000元,超生第三个40000元,每次都是上一个的2倍。现在给你一对父母生的孩子个数N和最多生孩子个数M,以及N个孩子的性别。求:她们要交多少钱的罚款。思路:先求M个孩子里有木有男孩,有的话,从下一个孩子开始算超生的罚款,没有的话,就从第M+1个孩子开始计算罚款。计算罚款的时候先按1、2、原创 2015-01-24 22:29:08 · 1886 阅读 · 0 评论 -
POJ2485 Highways【Prim】
题目大意:岛上要建高铁,有N个站点,给你一个图,表示这N个站点每个站点之间的距离,要求建造的高铁路线能连接所有的站点,并且使总的路程最短。求出满足情况的路线中两个站点间最长的路。思路:根据要求求出最小生成树,并求出最小生成树上的最大边,就是最终答案。原创 2015-01-24 20:55:35 · 1026 阅读 · 0 评论 -
POJ2395 Out of Hay【Kruskal】
题目大意:1号农场的草被牛吃完了,Bessie必须从其他农场运草回来,总共有N个农场,Bessie要去其他所有的农场运草回来,他想要使总路程最短并且路线能连接所有的农场。必须要考虑到路上带的水袋大小。因为水袋大小和路线中距离最长的两个农场之间的路有关,现在Bessie想要求出满足要求的路线中两个农场之间最长的路距离是多少。思路:满足要求的路线其实就是最小生成树,路线中两个农场之间最长的路距离就是最小生成树上最长的边。这样用Kruskal求最小生成树的时候,用Max求出最小生成树上最长的边。原创 2015-01-24 20:25:36 · 1781 阅读 · 0 评论 -
POJ2377 Bad Cowtractors【Kruskal】【求最大生成树】
题目大意:Bessie要在John的N个谷仓之间修路,John要求用尽可能少的路使得所有谷仓都能联通,并且总距离最短,但是他又不想给Bessie钱。Bessie已经意识到John可能不给他钱,所以他就想把这个工程做的最糟糕并且不让John发现。他决定用尽可能少的路使得所有谷仓都能联通,但是要使总距离尽可能长。求这个可能的总距离。如果不能使得所有谷仓都联通,则输出"-1"。思路:和最小生成树的求法类似,这里使边的权值尽可能大。用Kruskal算法来做,排序的时候,将边从大到小排序。因为Kruska原创 2015-01-24 19:11:37 · 1655 阅读 · 0 评论 -
POJ1789 Truck History【Prim】
题目大意:给你N个字符串,每个字符串代表一个结点,每个结点之间的距离为字符串中不同字符的个数。比如:"abaaaaa"和"aabaaaa",第二个和第三个字符不同,两个结点之间的距离就是2。以此类推,得到所有的结点。求所有结点构成图的最小生成树。思路:按题意算出各结点之间的距离,存入图中,用Prim算法求解,注意输出格式。原创 2015-01-24 17:45:53 · 1052 阅读 · 0 评论 -
HDU2101 A + B Problem Too【水题】
题目大意:判断(A+B)%86是否等于0,等于0输出"yes",否则输出"no"。思路:水的不能再水了。。。原创 2015-01-23 20:56:48 · 1272 阅读 · 0 评论 -
HDU2099 整除的尾数【水题】
思路:从0~99暴力枚举下,符合条件的存入ans中,输出的时候注意格式。原创 2015-01-23 20:05:09 · 1172 阅读 · 0 评论 -
HDU1088 Write a simple HTML Browser【字符串处理】【水题】
题目大意:输入一段HTML的文本,然后根据输入的文本,按照HTML的语言格式输出出来,但是每一行不能超出80个字符,超出的就要换行输出。注:遇到<br>就要换行,遇到<hr>就要在下一行输入80个'-'。思路:第一遍做的时候边读入边输出,刚开始PE了两次,改了改AC了。之后觉得这样输入输出毫无审美可言。。。所以改成了先存入一个大的字符串中,再将它输出出来。这样就美观多了。(ーー゛)。。。原创 2015-01-20 17:27:12 · 1282 阅读 · 0 评论 -
HDU2098 分拆素数和【水题】【筛法求素数】
思路:用筛法求素数求出10000以内的素数,遍历2~N/2,直接判断i和N-i是否都为素数,并且i和N-1不相等。如果满足条件,则总数加1。最终得到结果。原创 2015-01-20 14:11:46 · 1422 阅读 · 0 评论 -
HDU2122 Ice_cream’s world III【Kruskal】
题目大意:给你N个点(编号为0~N-1),M条路,问最小生成树是多少,如果不能生成最小生成树,则输出impossible思路:用Kruskal来做,如果最后得不到N-1条路,就输出impossible,否则就输出结果。原创 2015-01-19 23:07:24 · 1215 阅读 · 0 评论 -
HDU1301 POJ1251 Jungle Roads【Prim】【最小生成树】
题目大意:热带的一个岛上有N个村庄,还有一些路,现在丛林把道路给破坏了。酋长想要去掉一些不必要的路,使得剩下的路既能联通全部村庄,又能使总路程最短。求:这个最短的总路程是多少思路:就是给你N个点,M条边,求最小生成树。用Prim算法来做,输入的时候将字母代表的村庄转换为下标(即字母 - 'A')即可。原创 2015-01-19 22:29:15 · 1103 阅读 · 0 评论 -
HDU1006 Tick and Tick【计算几何】
题目大意:现在有一个普通时钟,有时针、分针、秒针,秒针不是一秒一秒间断走的,而是连续走的。给你一个度数D(小于等于120°)。求:24小时中,三个指针超过这个度数的时间占所有时间的百分比是多少。思路:之前想的按每秒模拟一遍就可以了。没想到时间是连续的,而不是间隔的,参考了评论区才知道怎么去做。顺便膜拜大神。。。三个指针走的角速度:秒针速度S = 6°/s,分针速度M = (1/10)°/s,时针速度H = (1/120)°/s这三个指针两两之间的相对速度差为:秒时相差S_H = (719/1原创 2015-01-17 18:42:51 · 3012 阅读 · 4 评论 -
HDU2097 Sky数【水题】
思路:直接用/和%求出各进制各数位上的和,判断是否相等。原创 2015-01-16 14:40:18 · 848 阅读 · 0 评论 -
HDU2096 小明A+B【水题】
思路:A、B分别对100取余的数相加再对100取余就可以了。原创 2015-01-16 14:29:09 · 1034 阅读 · 0 评论 -
HDU2095 find your present (2)【水题】
题目大意:给你N个数(N为奇数),找到N个数里边有奇数个的那个数。思路:排序后统计每个数的个数,输出奇数的那个数。原创 2015-01-16 14:04:40 · 1015 阅读 · 0 评论 -
HDU2093 考试排名【水题】
题目大意:OJ实时排名系统排序思路:用结构体存每个人的名字、做题数和总耗费时间。然后计算每个人的做题数和总耗费时间,之后排名。代码里用到了sscanf函数。可提取字符串中数按"%d"的格式到整型d中。string中的find();函数返回值为:若找到待查找元素,返回该元素在string中的位置,否则返回一个特定值string::npos(即-1)。原创 2015-01-16 13:09:12 · 1161 阅读 · 0 评论 -
HDU2090 算菜价【水题】
算菜价Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15592 Accepted Submission(s): 8485Problem Description妈妈每天都要出去买菜,但是回来后,原创 2015-01-15 22:15:49 · 1719 阅读 · 0 评论 -
HDU2088 Box of Bricks【水题】
题目大意:给你N堆砖的高度,通过移动,使得这N堆砖变得一样高,问最少移动多少块砖。思路:先求出变得一样高的高度(平均高度),再遍历一遍高度,低于平均高度的砖与平均高度相差的高度差的总和就是所求结果。原创 2015-01-15 22:06:37 · 1489 阅读 · 0 评论 -
HDU2078 复习时间【水题】【数学】
题目大意:给你N个数,最多取M个数,将M个数从大到小排列,求相邻的平方差(第一个数平方差是该数与100的差),使得平方差和最大。思路:其实,没那么复杂。从N个数中取1~M个数。只取一个最小值,得(100-Min)^2就可以了。很坑的题。。。。。原创 2015-01-15 21:53:38 · 1204 阅读 · 0 评论 -
HDU2076 夹角有多大(题目已修改,注意读题)【水题】【计算几何】
思路:分别求出分针和时针到12:00的夹角,并判断两者夹角是否大于180。最后的时候,在强制转换成整型输出。原创 2015-01-15 09:21:02 · 955 阅读 · 0 评论 -
HDU2075 A|B?【水题】
题目大意:看A对B取余是否有余数。原创 2015-01-15 08:59:19 · 983 阅读 · 0 评论