- 博客(23)
- 资源 (6)
- 收藏
- 关注
原创 BestCoder Round #20 B
题目大意:输入T表示测试用例数,接下来输入N,表示有N组数据,每组有x,y表示X轴上的一段线段,最后找出被这N条线段覆盖最多的点的覆盖次数。 算法思想: 每条线段[x,y],可以理解为【x,y+1)的左闭右开的区间,从x点开始覆盖次数加1,当点到y+1时之前的覆盖结束覆盖次数-1。基于此思想,可以将所有的x,y+1排序,然后找出这2N个数的最大字段和,又因为x 代码如下: #include
2014-11-30 21:23:31 393
原创 BestCoder Round #20 A
题目大意:N个人进行投票,找出获得票数最多的人,若两人票数相同输出序号小的那个。 算法思想: 主要用到一个结构体,有两个属性,一个记录所获的票数,一个记录编号,然后对结构提数组拍个序,找出获得票数最多的且其序号是获得相同票数人中最小的序号。 代码如下: #include #include #include using namespace std; typedef struct{
2014-11-29 21:42:15 485
原创 HDOJ 1874 最短路问题
题目大意:输入N,M,分别表示有编号(0~N-1)N个城镇和M调街道,接下来输入M条道路及其所花费的时间,之后输入起点和终点,最后求出从起点到终点所花费的最短时间。 算法思想: 迪杰斯特拉算法 1.根据输入信息建立邻接矩阵,为无向图。此处需要注意会有道路覆盖的问题,此时应用花费时间最小的道路。 2.用d
2014-11-29 21:27:06 487
原创 HDOJ 2544 最短路
题目大意: 输入N,M,N表示有多多少个路口,M表示有多少条街道,接着输入M行,每行输入a,b,c 三个数表示,从a路口走到b路口要花c分钟,题目要求计算从1路口走到N路口所花的最短时间。 算法思想: 1.将m条街道的信息存入邻接矩阵中,因为是无向图,所以邻接矩阵是对称的。 2.进行一个初始化操作,首先用d[]数组存储源节点到其它节点的最短距离,初始时置为无穷大。
2014-11-28 16:39:09 535
原创 Kruskal算法(模板)
const int MAXN=11000; /*边结构*/ typedef struct{ int start;//道路起点 int end;//道路终点 double value;//道路权值 }Edge; Edge road[MAXN]; /*节点集合*/ int node[105]; /*寻根函数*/ int Find_set(int n){
2014-11-27 21:14:56 565
原创 HDOJ 1875 畅通工程再续---最小生成树问题
题目大意:首先输入T,表示测试用例数,之后输入C表示千岛湖中小岛的数目,接着输入每个小岛的位置坐标,根据已知条件计算出使得所有小岛畅通,且代价最小。每公里的修桥造价是100.注意,要求任意小岛之间的距离必须在[10,1000]之内,如果不能使得所有小岛畅通输出"oh!" 算法思想: 1.按照题意输入小岛的数目和坐标 2.计算出每个小岛间的欧几里得距离,并且过滤
2014-11-27 20:47:11 429
原创 HDOJ 1102
题目大意: 输入N表示现存在的村庄数目,接下来输入N*N规模的邻接矩阵来表示村庄间道路的信息,之后输入Q表示目前已存在的道路数目,随着输入Q条已存在的道路。求出使得所有村庄畅通的最.小代价。 算法思想: 1.新建一个邻接矩阵存储图的信息。 2.接着,将已经存在的道路的代价置为0,因为这样使得在最小生成树中对已存在的道路不产生代价。 3.用一个Edge的
2014-11-26 20:57:45 875
原创 HDOJ 1879
题目大意: 输入一个N,表示村庄的数目,接下来输入N*(N-1)/2行,每行输入4个数,分别表示每条道路的起始端点,终止端点,花费代价,修成状态。求出是所有村庄连通的最小代价。 算法思想: 依旧采用克鲁斯卡尔算法,但是求解问题时需要注意道路的修成状态,如果状态为1则在用克鲁斯卡尔算法之前就该把这条边加入集合A中,或者修改该条道路的代价为0,然后在求解该问题。解
2014-11-26 12:44:14 452
原创 HDOJ 1233
题目大意:输入N表示乡村数目,接下来输入(N*(N-1))/2条道路,求出所有乡村连通的最小代价。 算法思想: 依旧是最小生成树,库鲁斯卡尔。 参见:点击打开链接 代码如下: #include #include #include using namespace std; const int MAXN=10000; typedef struct edge{ int sta
2014-11-25 20:57:01 401
原创 HDOJ 1863
题目大意:输入N,M表示道路的数目,和村庄的数目,接下来输入N行,每行输入一条道路的起始端点,终止端点,道路权值,输出所有村庄联通的最小代价,若是没有最小代价则输出“?”,测试用例的输入以N=0为结束标志。 算法思想: 1.定义一个结构体Edge用于存储道路的两个端点及权值。 2.扫描所有的边,按从递增的顺序进行排序。 3.采用克鲁斯卡尔算法构造最小生成树。(克鲁斯卡尔算法
2014-11-25 19:33:52 432
原创 数据结构---邻接表(模板)
typedef struct node{//边节点 char adjvex;//邻接边 int value;//权值 node *next;//后继指针 }EdgeNode; typedef struct VertexNode{//表节点 char vertex; int num;//邻接边的数目 EdgeNode *firstedge;
2014-11-25 16:52:39 486
原创 HDOJ 1301
题目大意: 输入一个数n表示岛上的村庄数,接下来输入n-1行,每行先输入一个乡村名称,接下来输入与其邻接的乡村数,之后输入没给邻接的乡村及道路权值,以此类推共n-1行,最后题目要求输出该联通图的最小生成树的最小代价。 算法思想: 1.先建立一个邻接表,用来存储连通图。 2.从邻接表中读出,联通图的所有边。 3.将读出的边进行排序。
2014-11-25 16:04:46 732
转载 HDOJ 题目分类
1001 整数求和 水题 1002 C语言实验题——两个数比较 水题 1003 1、2、3、4、5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 1006 Redraiment猜想 数论:容斥定理 1007 童年生活二三事 递推题 1008 University 简单hash 1009 目标柏林 简单模拟题 1010 Rai
2014-11-23 15:14:31 706
原创 HDOJ 1013
题目大意:输入一个大数,求出该大数的所有位数之和,之后判断该和是否为一位数,若不是一位数则继续求出该和的每位数字之和,反复此过程直至和为一位数。最后输出这个一位数。 算法思想:主要注意一点,将大数以字符串的形式表示,在求和的时候转化为数字。 代码如下: #include #include using namespace std; int d[10]; char s[10001]; i
2014-11-22 16:49:28 398
原创 HDOJ 1013
题目大意:输入一个大数,求出该大数的所有位数之和,之后判断该和是否为一位数,若不是一位数则继续求出该和的每位数字之和,反复此过程直至和为一位数。最后输出这个一位数。 算法思想:主要注意一点,将大数以字符串的形式表示,在求和的时候转化为数字。 代码如下:
2014-11-22 16:34:47 569
原创 HDOJ 1004 字符串排序
题意:给出N种颜色,统计出出现次数最多的颜色。 算法:先对字符串进行排序,然后迭代的比较出出现次数最多的颜色。 代码: #include #include #include using namespace std; int main(){ int N,flag=0; string color[1005]; while(cin>>N&&N!=0){
2014-11-21 11:09:21 623
转载 ACM训练计划
看完人家的博客,发现任重道远。。。 一位高手对我的建议: 一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的 ,主要时间是花在思考算法上,不是花在写程序与debug上。 下面给个计划你练练: 第一阶段: 练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都
2014-11-14 21:31:01 712
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人