果枫-国峰

2012年8月31日

hdu 杭电 1242 Rescue

摘要: 题意:从a开始,找到r所需的时间(r可以有多个,找到第一个输出所需的时间即可),‘#’是墙不可走, 经过‘.’时间加1,经过‘x’时间加2.解法:广搜,使用优先队列,队列中的首元素都为队列中step最小的一个元素。注意:r可以有多个。ac代码:View Code #include<iostream>#include<queue>using namespace std;const int M=200+10;char map[M][M];//地图int use[M][M];//用作标记int nn[4][2]={0,1,-1,0,0,-1,1,0};//方向向量:左,上,右 阅读全文

posted @ 2012-08-31 19:50 果枫-国峰 阅读(202) 评论(0) 推荐(0) 编辑

hdu 杭电 1262 寻找素数对

摘要: 题意:找一对最接近的素数(素数对可以相等)其和等于给出的偶数。解法:prim[10001]数组中不是素数标记为1,从prim[]下标为n/2开始搜.注意:素数对可以相等。ac代码:View Code #include<iostream>using namespace std;const int m=10000+1;bool prim[m];int main(){ int i,j; memset(prim,0,sizeof(prim)); prim[0]=prim[1]=1; for(i=2;i<=m/2;i++)//预处理,执行后不是素数的被标记为1 { ... 阅读全文

posted @ 2012-08-31 19:49 果枫-国峰 阅读(176) 评论(0) 推荐(0) 编辑

hdu 杭电 2216 Game III

摘要: 题意:Z每走一步S就要往相反的方向走一步(所走的那步假如是墙,或者出界,S不动)如果能找到S请输出最小的步数,不能输出“Bad Luck!”解发:广搜,vis[][][][]标记Z,S已走过的路。注意:特别要注意,此题的地图必须用gets()或scanf(“%s”)输入,其中的缘由本人也不知,但我已经故意尝试用cin输入地图,但结果是wa。代码后有大量的测试数据,测试结果运行我的代码即可。ac代码:View Code #include<iostream>#include<queue>using namespace std;const int m=22;char map[ 阅读全文

posted @ 2012-08-31 19:47 果枫-国峰 阅读(130) 评论(0) 推荐(0) 编辑

hdu 杭电 1241 Oil Deposits

摘要: 题意:找图中没有连在一起的'@'的个数。解法:广搜ac代码:View Code #include<iostream>#include<queue>using namespace std;const int M=100+10;char map[M][M];//地图bool use[M][M];//用作标记int vec[8][2]={-1, 0,-1,-1,0,-1,1,-1,1, 0,1, 1,0, 1,-1,1};//方向向量:左,左上,上,右上,右,右下,下,左下struct que{ int i,j;};int main(){ int m,n; i 阅读全文

posted @ 2012-08-31 19:45 果枫-国峰 阅读(105) 评论(0) 推荐(0) 编辑

hdu 杭电 1312 Red and Black

摘要: 题意:W H分别代表图的列与行,图中有'.' '#' '@'从@的位置出发最多能搜到多少个‘.’,‘#’为障碍物。解法:广搜ac代码:View Code #include<iostream>#include<queue>using namespace std;const int M=20+3;char map[M][M];//地图bool use[M][M];//用作标记int v[4][2]={-1,0,0,-1,1,0,0,1};//方向向量:左,上,右,下struct que{ int i,j;};int main( 阅读全文

posted @ 2012-08-31 19:45 果枫-国峰 阅读(133) 评论(0) 推荐(0) 编辑

hdu 杭电 1002 A + B Problem II

摘要: 题意:给你两个数,求和。很明显无论是int(最多能装10位的数),还是__int64(最多能装20位的数)都装不起1000位的数,所以必须用字符串装要相加的数。解法:使用strrev()把字符串中的元素倒过来,如:a[3]="abc",strrev(a),数组a中的元素循序为"cba"注意:输入的两个数都为0的情况,或一个数为0的情况。ac代码:View Code #include <stdio.h>#include<string.h>int main(){ int t; char a[1020],b[1020],c[1020]; 阅读全文

posted @ 2012-08-31 19:44 果枫-国峰 阅读(156) 评论(0) 推荐(0) 编辑

hdu 杭电 1495 非常可乐

摘要: 题意:容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。能平分的话请输出最少要倒的次数,否则输出"NO"。解法:广搜,每一个队头元素都要进行6次操作,如图进行了n->m一次操作:对应的6中操作(S->N,S->M,N->S,N->M,M->S,M->N)此图必须注意:n,m的意思为:瓶子n中此刻存在的可乐量为n,瓶子m中此刻存在的可乐量为m注意:从一个瓶倒进另一个瓶时必须分两种情况,1:能装满 阅读全文

posted @ 2012-08-31 19:43 果枫-国峰 阅读(507) 评论(0) 推荐(0) 编辑

数组结构体中排序

摘要: //sort排序用法//函数原型: void sort(iterator begin, iterator end);//将[begin,end) 之间的元素使用默认的<进行排序#include <algorithm> // 包含头文件//自定义排序函数bool cmp(const int a,const int b){ return a > b;}int main(){ int a[5]={3,4,1,2,5}; sort(a,a+5,cmp); //cmp,降序排序 5,4,3,2,1 sort(a,a+5); //默认升序排序,1,2,3,4,5 return 0; 阅读全文

posted @ 2012-08-31 19:42 果枫-国峰 阅读(310) 评论(0) 推荐(0) 编辑

hdu 杭电 1728 逃离迷宫

摘要: 题意:m × n (m行, n列)的迷宫,给你两个坐标A(x1,y1),B(x2,y2),从A->B转过的最少弯数是否满足条件 满足输出“yes”,否输出“no”解法:广搜,特别注意:走过的点绝不可以标记,原因:如图三点1,2,3,假设1转弯数为5方向向下,2的转弯数为6方向向右,假设此时点2在队头,点2先搜到点3,如果把3标记,点3的转弯数为6,点1不能搜到点3,导致点3的转弯数不是最小,结果不言而知的wa。 很多人说用优先队列,但这题只要你标记了即使用优先队列还是不行,原因:假设1转弯数为5方向向右,2的转弯数为5方向向右,1,2的转弯数都为5都可在队头,假设此时点1在队头 阅读全文

posted @ 2012-08-31 19:41 果枫-国峰 阅读(755) 评论(0) 推荐(0) 编辑

并查集模板

摘要: 并查集学习:下面附模板代码l 并查集:(union-find sets)一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。l 并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x) 把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。2、Find_Set(x) 查找一个元素所在的集合查找一个元素所在的集合,其精髓是找到这个元素所在集合的祖先!这个才是并查集. 阅读全文

posted @ 2012-08-31 19:41 果枫-国峰 阅读(824) 评论(0) 推荐(1) 编辑

导航