ACM_HDU
长颜草
无话可说
展开
-
HDU 1686 Oulipo
题目链接题目意思简单的说就是给你T组测试数据,然后给你两个字符串(只包含大写字母),问你文本串中包含多少个模式串,其中字母可以重叠使用。例如:ABA BABABABA 答案就是3解题思路就是用简单的KMP算法跑一遍就可以求出。代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <cstring>#in原创 2017-12-25 17:44:58 · 234 阅读 · 0 评论 -
HDU 1372 Knight Moves【广搜】
题目链接题目意思类似于中国象棋中的马走日,就是给一个7*7的棋盘,现在给你两个点,让你计算从一个点到另一个点按照马走日的走法,需要走几步。解题思路就是一个简单的广搜,注意搜的方向是按照日字型来搜的,其他的和普通的广搜也没有区别。代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#i原创 2017-11-15 10:37:54 · 202 阅读 · 0 评论 -
HDU 2602 Bone Collector【01背包】
题目链接题目意思有一个骨头收藏家,他现在有n种骨头,和一个容量为v的袋子,不同的骨头有不同的价值和体积,现在要你求这个体积为v的袋子能装下的骨头的最大价值。解题思路这就是一道简单的01背包的模板题。代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace s原创 2017-11-17 20:54:50 · 187 阅读 · 0 评论 -
HDU 4009 Transfer water【最小树形图】
题目链接题目意思小A住在一个村庄,去年洪水淹没了这个村庄。因此他们决定将整个村庄搬到附近的山上。山上没有泉水,因此每一家必须选择打一个井或者从别的人家引水。如果一家决定去挖一口井,则他们打井的费用是他们房子的高度,X每米。如果决定去引水,如果引水的地方比当前地方高,则引水的钱是这两家的距离成上Y美元每米。如果引水的地方比当前低。则必须需要水泵(除了引水线后)还要花费Z美元买一个水泵。除此之外,村民原创 2017-11-02 19:46:44 · 234 阅读 · 0 评论 -
HDU 5253 连接的管道 【最小生成树】
题目链接解题思路这就是一道简单的最小生成树的模板题。只要向左向右去走就行。代码部分#include <iostream>#include <string.h>#include <stdio.h>#include <algorithm>#include <math.h>using namespace std;int maps[1010][1010];int pre[1010*1010]原创 2017-11-02 19:25:18 · 268 阅读 · 0 评论 -
HDU 2489 Minimal Ratio Tree【最小生成树】
题目链接题目意思给你n个节点,接着给出你这n个节点的权值,然后给出你节点之间连接的边的权值,现在给你一个数m,让你求包含m个节点的Ratio的最小值,其中Ratio就等于m个点的边权值之和比上节点权值和。解题思路这道题给出的节点数比较少,所以可以用深搜结合最小生成树来解。将所有的节点搜一遍,选出Ratio值最小的一个即可。用最小生成树求Ratio的值,在对每个点进行一次深搜,看该点选还是不选。代码原创 2017-10-28 20:33:48 · 208 阅读 · 0 评论 -
HDU 2112 HDU Today
题目链接题目意思给你n个车站,接着是n条路线,现在要从起点到终点,问最短距离是多少。解题思路这就是一道简单的最短路问题,唯一的问题就在于这道题的输入的是一个地名而不是以前经常写的数字,其实这个做个简单的处理就行。我们用map来将地名映射成数字,就变成了一道原来常做的最短路问题。代码部分#include <iostream>#include <stdio.h>#include <string.h原创 2017-10-16 21:09:34 · 167 阅读 · 0 评论 -
HDU 2680 Choose the best route
题目链接题目意思给你三个数N,M,S分别代表N个车站,M条路和终点S。然后给你一个W,接着W个数表示出发点,现在要求的是从起点开始到终点的最短距离。解题思路这道题和之前的那道一个人的旅行那道题很像,我们将起点统一看成0,然后只要将那W个出发点到0的距离定为0,那么这道题就转化成立一道普通的最短路问题,就用dijkstra写就好。代码部分#include <iostream>#include <s原创 2017-10-15 17:03:36 · 185 阅读 · 0 评论 -
HDU 2923 Einbahnstrasse
题目链接题目意思给你三个数,N,C,R分别代表N个地点,C辆车和M条路,已知这M条路有单向的也有双向的,现在给你一个起点和C个终点,要你求从起点开始走到终点再走回的最短距离。解题思路由于路有双向的有单向的,所以去的路与返回的路径不一定相同,所以就求起点到终点的最短距离加上终点的起点的最短距离就好了,跑一遍最短路就行。要注意的是数据的输入时字符串,要记得处理一下。代码部分#include <iost原创 2017-10-15 16:32:30 · 195 阅读 · 0 评论 -
HDU 1102 Constructing Roads【最小生成树】
题目链接题目意思给你n个村庄,再给你每个村庄之间的距离,现在给你Q条路。现在要将所有的村庄连通,问最短还要修多长的路。解题思路这就是一道简单的最小生成树问题。不过用kruskal算法写的时候,要注意判断所有村庄都联通是的结束条件,因为这一点的问题,我还内存超了还几次呢。。。。代码部分 kruskal算法#include <iostream>#include <stdio.h>#inclu原创 2017-10-28 20:44:01 · 238 阅读 · 0 评论 -
HDU 1171 Big Event in HDU【01背包】
题目链接题目意思现在给出n种设备,接着给出你每种设备的价值和个数,现在要将这些设备分给A,B两个院系,要求两个院系分得的设备价值尽可能的接近。并且保证A 院系的价值不小于B院系。解题思路简单的01背包问题。要注意的一点是题上的要求输入以一个负数结束的,就这一点错误导致我找了好久的bug。。。代码部分#include <iostream>#include <stdio.h>#include <s原创 2017-11-15 20:40:11 · 252 阅读 · 1 评论 -
HDU 1719 Friend
题目链接题目意思(1)、定义1和2是朋友数 (2)、假设a和b是朋友数,那么a*b+a+b也是朋友数 满足上述两个条件的数为朋友数。 现在给你n个数,让你判断这n个数是不是朋友数。解题思路假设c=a*b+a+b。那么根据(a+1)(b+1)=a * b+a+b+1,可知c+1如果能够被a+1和b+1除尽,那么c+1就是朋友数。又由于1和2是给定的朋友数,那么如果c+1除以2或者3等于1就可以原创 2017-11-19 20:46:34 · 186 阅读 · 0 评论 -
HDU 1570 AC
题目链接题目意思给你一个字符,接着给你两个数m,n,然后按照上边给的公式求出相对应的值。解题思路一道简单题。直接看代码吧!代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#include <math.h>#define ll long long原创 2017-12-07 17:50:43 · 230 阅读 · 0 评论 -
HDU 2700 Parity【字符处理】
题目链接题目意思给你一串字符,如果当中1的个数为奇数就说明这个串具有奇数奇偶校验位,否则这说明这个串具有偶数奇偶校验位。现在e代表偶数,o代表奇数。让你输出相应的串。解题思路就是一道简单的水题,计算最后一位前的1的个数,如果最后为e就输出的串中1的数为偶数,否则就为奇数。代码部分#include <iostream>#include <stdio.h>#include <string.h>#原创 2017-12-06 12:57:32 · 257 阅读 · 0 评论 -
HDU 1280 前m大的数
题目链接题目意思给你两个数N,M,接着给你N个数,然后让你求这N个数两两相加的和的前m大个数。解题思路就是一个暴力加快排,将N个数两两相加的和进行排序输出前m个即可。代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#include <math.h原创 2017-12-06 12:44:10 · 217 阅读 · 0 评论 -
HDU 4847 Wow! Such Doge!【简单题】
题目链接题目意思题上那一大堆的英文描述根本没有啥用。题目的意思就是说给你很多行的字符串,然后让你统计其中doge的个数。只要是doge这个词就算,无论大小写。解题思路这就是一道看着题目很长,其实就是诓我们的简单题。不过要注意的是这道题要处理掉字符串中间的空格。而且这题没有输入结束。他就是直接读到了文件末尾。代码部分#include <iostream>#include <stdio.h>#in原创 2017-11-26 20:58:57 · 289 阅读 · 0 评论 -
HDU 2212 DFS【思维】
题目链接题目意思定义如果一个数的每位数上的阶乘和等于这个数,那么就称这个数为DFS数。例如145=1!+4!+5!,那么145就是一个DFS数。 现在要你输出区间【1~2147483647】的所有DFS数。解题思路我们可以发现这样的数肯定不会大于100000,那么我们就随意取一个大于100000的数作为上限,遍历1到这个上限的所有数,输出满足条件的数即可。代码部分#include <iostre原创 2017-11-26 20:11:49 · 298 阅读 · 0 评论 -
HDU 5690 All X【快速幂】
题目链接题目意思给你四个数x,m,k,c,分别代表有m个x,现在让m个x对k取模,如果结果等于c就输出Yes,否则输出No。解题思路由于题上给出的m值很大,所以用普通方法直接写的话肯定会超时。现在我们就转换一种方法。如果(10^m-1)/ 9*x是不是就可以代表m个x。那么我们现在让(10^m-1)/ 9 * x对k取模与c进行比较即可。那么我们可以用快速幂来求10^m。代码部分#include原创 2017-11-26 19:53:57 · 208 阅读 · 0 评论 -
HDU 2087 剪花布条
题目链接题目意思给你一个文本串A,接着给你一个模式串B。问你最多能从文本串中剪出几个模式串。解题思路这就是一道KMP的模板题。我们只要找出文本串中含有的最大的模式串的个数即可。 没啥可说的了,直接看代码吧!代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <cstring>#include <algo原创 2017-12-12 17:49:10 · 203 阅读 · 0 评论 -
HDU 1727 Hastiness
题目链接题目意思给你一个不大于四位数的数字,输出它的英文写法。解题思路就是一道暴力题。不过很容易出错,要考虑的情况比较多。所以做题的时候得认真一点。代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>#include <map>using name原创 2017-11-19 20:52:59 · 241 阅读 · 0 评论 -
HDU 1754 I Hate It【线段树】
题目链接题目意思给你n个学生的成绩然后m个询问,Q时询问学生A到B的最高成绩,U时将A学生的成绩改为B解题思路一道简单的线段树题,具体的看代码吧!代码部分#include <iostream>#include <stdio.h>#include <string.h>#define lchild left,mid,root<<1#define rchild mid+1,right,root<原创 2017-09-13 18:18:13 · 219 阅读 · 0 评论 -
HDU 1045 Fire Net【深搜】
题目链接题目意思给你一个n*n的矩阵,让你在空地放枪支,其中要求“.”代表空地,“X”代表墙。要求枪支不能出现在同一行,同一列,除非中间有墙阻隔。现在问你最多能放多少枪支。解题思路这道题就是一个普通的深搜问题,和之前做过的N皇后问题很相似。我们要从开始往后走,走到一个位置的时候往这一行,这一列的前边搜索是否有枪,如果有枪就不能再放,如果遇到墙就可以放置。代码部分#include <iostream原创 2017-10-10 11:20:45 · 188 阅读 · 0 评论 -
HDU 1181 变形课
题目链接题目意思魔法咒语中假设一个单词以A开头以B结束,就是将A变成B。现在给你很多的单词,让你判断能否将B变成M。如果可以输出Yes,否则输出No。解题思路就是一道简单的广搜问题,将所输入的单词先找出B,然后开始搜索是否能过找到M。这里需要注意一下最后的输出。不要忘记输出后还有一个句号,这点小细节很容易忽略导致错误。代码部分#include <iostream>#include <stdio.原创 2017-10-10 16:51:02 · 290 阅读 · 0 评论 -
HDU 1863 畅通工程【最小生成树】
题目链接题目意思给你n条边和m个城镇,城镇编号为1~m。现在要你求连通所有城镇的最小花费。如果不能连通就输出“?”。解题思路其实这就是一个简单的最小生成树的问题。我们可以用kruskal来写。注意我们要判断能不能形成通路,加一个标记变量。判断能不能形成回路即可。代码部分#include <iostream>#include <stdio.h>#include <string.h>#includ原创 2017-08-14 09:39:19 · 268 阅读 · 0 评论 -
HDU 1879 继续畅通工程【最小生成树】
题目链接题目意思给你n个城镇,城镇序号从1~n,现在要使这n个城镇相连。每组数据给你两个城镇的编号,和修这条路的成本,还有这条路的状态,0表示没修,1表示修好。现在要你求让城镇相连的最小的修路花费。解题思路其实这就是一个最小生成树的问题。我们找到一棵最小生成树。这里需要注意的是两个城镇之间可能路已经修好,那么我们就要有一个操作就是把已经存在道路的两个城镇之间的花费改为0。具体实现看代码吧!代码部分#原创 2017-08-14 08:50:43 · 279 阅读 · 0 评论 -
HDU 2795 Billboard【线段树】
题目链接题目意思有一块h*w的广告牌,现在要往上边贴广告,所贴广告的高度都为1,要求所贴的广告尽量往上和往左贴,如果可以贴,输出你所帖广告的行号,否则输出“-1”。解题思路这道题用线段树来解。我们以广告牌的高度作为标准来构造线段树,另外用一个数组来存储线段树每个节点的宽度。贴广告的时候我们从左子树往右子树来贴,这样就是从上往下来贴的。具体过程看代码吧!代码部分#include <iostream>原创 2017-07-24 11:50:34 · 192 阅读 · 0 评论 -
HDU 1166 敌兵布阵【线段树】
题目链接题目意思给定一个序列,有三种操作,最后输出给定范围的值之和题目意思数据大,普通方法肯定超时,用线段树来计算区间的加法。代码部分#include <iostream>#include <stdio.h>#include <string.h>#define lchild left,mid,root<<1#define rchild mid+1,right,root<<1|1using原创 2017-07-24 19:28:43 · 337 阅读 · 0 评论 -
HDU 6129 Just do it
题目链接题目意思给你一个包含n个数的序列A和一个数m,序列B中的数是序列A经过异或得到的,比如:b[i]=a[1]^a[2]^…..^a[i]。现在让你求经过m次异或后,序列B的值。解题思路我们写下其前五项的值可以发现我们设定ans【i】【j】表示进行到第i次,第j个位子的答案的话,ans【i】【j】有推导式:ans【i】【j】=ans【i-1】【j】^ans【i】【j-1】; 从图中我们可以看原创 2017-08-16 10:49:52 · 1529 阅读 · 14 评论 -
HDU 6127 Hard challenge
题目链接题目意思平面上有(n)个点,已知每个点的坐标为((x,y)),以及该点的权值为(val),任意两点之间可以连接成一条不经过原点的边,该边的权值是两个端点的权值的乘积。现在要求画一条经过原点的直线,定义这条直线的权值为这条直线穿过的所有线段的值的和,问权值的最大值。解题思路我们将所有的点按照极角排序,分别散落在y轴的左右两侧,y轴左端的点的和为suml,右端的点的和为sumr,则权值和为su原创 2017-08-17 09:24:00 · 577 阅读 · 0 评论 -
HDU 6140 Hybrid Crystals
题目链接题目链接搞得好像阅读理解,就是给定一个序列。序列的每个值都有属性,N代表可加可减,L代表只能加,D代表只能减,当然这些都可以用或者不用。给定一个k,问k是否可能用这个序列构成。解题思路这道题就是固定左右的区间,不断地扩展,然后判断k是否在这个区间内就可。 感觉这道题就是阅读理解,给的式子也没啥用,关键竟然能够水过,根本就没有深究,考虑的不够严谨,竟然还有这种操作,表示很心累。代码部分#i原创 2017-08-17 20:08:36 · 438 阅读 · 0 评论 -
HDU 6154 CaoHaha's staff
题目链接题目意思给你一个面积,让你求围成这个面积最少需要几条边,其中边的连线只能是在坐标轴上边长为1的的线或者是两个边长为1 的线的对角线。解题思路这其实就是一个找规律的题,我们列举前几个会发现,增加斜边,每增加一条边面积就能增加1.5,然后根据你所列出的边数跟面积的关系去找规律,其中每次能被4整除的数都能形成一个菱形,那是边数确定面积最大的。代码部分#include <bits/stdc++.h原创 2017-08-19 19:09:32 · 517 阅读 · 0 评论 -
HDU 6152 Friend-Graph
题目链接题目描述就是一个团队如果存在三个或者三个以上的人互为朋友的关系,或者都不是朋友的关系,那么就说明这个团队是一个坏团队,否则输出好团队。解题思路暴力大法好,将每个人之间的关系都存于一个w数组之中,注意这里的数组为bool类型,暴力任意三个节点,如果他们之间的关系都为true或者false,则输出 “Bad Team!”,否则输出”Great Team”。与此同时知道了能用bool类型的数组尽原创 2017-08-19 19:50:19 · 372 阅读 · 0 评论 -
HDU 1232 畅通工程【并查集】
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1原创 2017-07-17 15:48:32 · 253 阅读 · 0 评论 -
HDU 1233 还是畅通工程【最小生成树】
Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。 Input 测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的原创 2017-07-21 11:19:19 · 218 阅读 · 0 评论 -
HDU 1875 畅通工程再续
题目链接题目意思给你n个小岛,现在给出你这n个小岛的坐标,如果两小岛之间的距离在10~1000之间就可以建桥,建桥的费用为100元/米。现在让你求要将所有的小岛连通的最小花费。解题思路这就是一道最小生成树的题,不过是求出坐标之间的距离算最小生成树,然后再乘以花费即可。但是要注意用kruskal算法时的控制结束条件,点数比较多,控制不好就会超时。。。。代码部分#include <iostream>原创 2017-10-28 20:19:53 · 188 阅读 · 0 评论 -
HDU 1869 六度分离
题目链接题目意思给你N个人,编号从0~N-1,接着的M行给你A和B的关系,现在让你判断是否两个人之间最多隔6个人可以让两个人相互联系。解题思路将两个人之间的距离定为1,那么用Floyd跑一遍,如果两个人之间的最短路大于7,那么就是两个人之间最少相隔了七个人,那么定理不存在。代码部分#include <iostream>#include <stdio.h>#include <string.h>原创 2017-10-11 21:16:04 · 246 阅读 · 0 评论 -
HDU 3790 最短路径问题
题目链接题目意思给你n个点,m条无向边,现在要从一个城市到另一个城市,要求最短路,如果最短路径有多条,就选花费最小的那条路。解题思路这道题就是在模板题上稍微做一下修改即可,就是在判断最短路的时候如果最短路相同,就再判断一下最小花费即可。代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#原创 2017-10-11 21:07:30 · 217 阅读 · 0 评论 -
HDU 2066 一个人的旅行
题目链接题目意思给你T条路,现在小草要从S个与他相邻的城市出发,去D个目的地中的一个,要你求到达目的地的最短时间。解题思路这就一道用dijkstra的最短路的题。这道题中的坑点就是小草到他相邻的城市的距离是0。用dijkstra跑一遍就出答案啦!代码部分#include <iostream>#include <stdio.h>#include <string.h>#include <math原创 2017-10-11 20:43:33 · 185 阅读 · 0 评论 -
HDU 1874 畅通工程续
题目链接题目意思有n个城镇,编号为0~n-1,m条道路,从一个城镇到另一个城镇有多条路,现在问你从一个城镇到另一个城镇的最短距离是多少。如果没有路就输出-1。解题思路这就是一道简单的最短路问题,用Floyd算法或dijkstra算法都行。其中要注意的是,城镇之间的路是双向的,下边刷数组的时候要刷双向的。代码部分#include <iostream>#include <stdio.h>#incl原创 2017-10-10 21:18:50 · 203 阅读 · 0 评论 -
HDU 1596 find the safest road
题目链接题目意思给你n个城市,接着是n*n的矩阵,记录着城市到城市之间道路的安全系数。安全系数为Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 。现在给你q个询问,接着给出你两个城市,让你输出这两个城市之间最安全的道路的安全系数。解题思路这相当于一道Dijkstra的模板题,只要稍微灵活运用就行。要求最安全的道路就是要算安全系数最大的道路。代码部分#incl原创 2017-10-11 10:27:27 · 195 阅读 · 0 评论