08 2013 档案
POJ3414Pots
摘要:http://poj.org/problem?id=3414题意 : 大意是说给你两个杯子的体积和一个目标体积,a,b,c,通过对a,b进行6种操作,调出c体积的水,6种操作分别是把a倒满,把b倒满,把a弄成空的,把b弄成空的,把a里边的倒到b里,把b里边的水倒到a里;思路 : 算不上说多难,反正就是六种操作#include#include#includeconst int maxn = 1001000 ;using namespace std;int a,b,c;int r,l;int vis[110][110];struct node{ int cup1,cup2,step;//两个...
阅读全文
POJ1416Shredding Company
摘要:http://poj.org/problem?id=1416题意 : 要为碎纸机公司开发一种新的碎纸机,这种碎纸机要具有3个特性 :一是粉碎机以一个目标数 t 作为输入,并且粉碎的纸上写有一个数字n,二是碎纸机将纸粉碎成碎片的时候每张碎片上都要有这个数字的一位或者数位,三是每张碎片上数字的总和尽可能地接近目标数 t ,但不可以超过 t ,可以等于 t 。如果目标数与纸张上的数字相同,则不要粉碎,如果任何组合的总和不可能小于或者等于目标数 t ,就输出error,例如,如果目标数 t = 1,但是纸上的数是123的话,就算最小的组合也是6,所以不满足要求。还有若是有多个符合要求的,也就是说有多个
阅读全文
POJ2676Sudoku
摘要:http://poj.org/problem?id=2676题意 : 这个是我最喜欢玩的数独了,就是一个9乘9的宫格,填上1到9九个数字,每行每列每个宫格之内不能有重复的数字,给出的九宫格中,0是待填的数字,其他数字是已经填好的,若是无法按要求填出来,就输出原来的九宫格;思路 : DFS,深搜递归一下,设三个标记数组,标记一下每行的,每列的,每个宫格的,如果这个数字出现了,就标记了就行,我代码里写的是标记数组row[ i ][ j ],代表的是第 i 行的 j 已经出现了,col[ i ][ j ]代表的是第 i 行的 j 数组存在,map[ i ][ j ]宫格 i 的 j 这个数字存在,而
阅读全文
POJ3009Curling 2.0
摘要:http://poj.org/problem?id=3009题意 : 迷宫升级版,也是m*n的迷宫,0是可以走的,1是阻塞,2是初始点,3是目标位置,这个的阻塞是可以消除的,就是说只要石头撞到阻塞,阻塞就由1变为0了,石头这个时候是可以停下来的,也就是说石头只有撞上阻塞停下来才算走了一步,还有要注意的一点是石头停了下来的时候不是停在阻塞那个点那的,还是它撞阻塞之前的那个位置,求出走到目标位置需要的步数,若步数超过了10步就输出-1;思路 : 典型的DFS,递归就行,不过注意一下结束条件就行了#include#include#includeusing namespace std ;const i
阅读全文
POJ2488A Knight's Journey
摘要:http://poj.org/problem?id=2488题意 : 给你棋盘大小,判断马能否走完棋盘上所有格子,前提是不走已经走过的格子,然后输出时按照字典序排序的第一种路径思路 : 这个题吧,有点别扭,再加上要用字典序输出,所以就要用一点小技巧了,自己提前将能输出字典序的那个先写到数组里保存,也就是说,搜索方向要进行特殊的排列,而这样的话,只要每次找的时候从第0行第0列开始找,第一个成功走完所有的格子一定是按字典序排列的,因为只要能走完所有的格子,而字典序最小的就是左上角那个格子,所以,直接从那个开始遍历就行了,如果马是中间那个位置,那就按照那个顺序来遍历即可#include#includ
阅读全文
POJ3087Shuffle'm Up(map)
摘要:http://poj.org/problem?id=3087题意 : 我只能说,,英语不好是硬伤。。。这个题比较别扭啊,不知道真正题意是不是我所想的,我先把我A了的代码按照的题意的意思说一下,就是说两堆字符串每堆n个字符,从下边开始轮流取,其实输入之后就是从头开始取,先取第二个字符串的,放在最底下,再取第一个的,直到合成一个新的,然后再把下边n个取出来当成第一个字符串,上边n个当成第二个字符串,继续进行上述操作,直到新合成的字符串与题目中给出的目标字符串相同,若是合不成就输出-1,每次输出先输出是第几组数据,再输出需要几次可以达到目标字符串思路 : 模拟?还行吧,挺简单的,用map函数标记一下
阅读全文
POJ1426Find The Multiple
摘要:http://poj.org/problem?id=1426题意 : 输入一个数n,找n的倍数m,这个m所满足的条件是,每一位数只能由0或1组成,在题目的旁边用红色的注明了Special Judge,表示一开始不懂什么意思,后来问的kkk,原来就是,样例的答案真的是样例,只要你输出符合要求的就行,不一定非要输出样例中给的。思路 : 这个题分类其实是BFS,但在网上看了某大神博客之后瞬间用了DFS做出来了。。。#include#includeusing namespace std ;int mark ;void DFS(long long BB,int n ,int floor){ if(...
阅读全文
POJ2251Dungeon Master
摘要:http://poj.org/problem?id=2251题意 : 就是迷宫升级版,从以前的一个矩阵也就是一层,变为现在的L层," . "是可以走,但是“#”不可以走,从S走到E,求最短的路径,若是找不到就输出“Trapped!”,每一层的同一个位置若都是" . "是可以直接走的,换句话说,map[1][j][k]与map[2][j][k]若都是" . ",是可以从map[1][j][k]走到map[2][j][k]的思路 : 求最短路径,用BFS ,这个题比较搞,分类在DFS里,但用DFS会超时啊,所以倒是欺骗了不少童鞋,这个题我
阅读全文
POJ3126Prime Path
摘要:http://poj.org/problem?id=3126题意 : 给你两个四位数,都是素数,一个是初始素数x,一个是目标素数y,让你从x变成y,x每次只能改变1位数,来变成另外一个素数k,再改变k的一位数变成另另外一个素数,这样变下去,找到x变成y需要的最少的次数,如果无法实现,输出Impossible思路 : 每个数字共有4位数,每位数字有10种可能的改变值[0...9],但最高位不允许为0,所以可以将问题转化为图:初始素数和所有经一位数值改变得到的新素数为节点,若素数a经一位改变后变为素数b,则a连向b一条边长为1的有向边,所以若目标素数y在图中,则初始素数到目标素数的路径上的边数即为
阅读全文
POJ1321棋盘问题
摘要:http://poj.org/problem?id=1321题意 : 我能说这是迄今为止见到的POJ上第二道中文题吗,既然是中文也很好理解,就不详述了思路 : 典型的深搜DFS ;#include#include#includeusing namespace std ;const int maxn = 100 ;int vis[maxn] ;int ch[maxn][maxn] ;int cnt = 0 ,n,k ;int judge(int a,int b)//判断这个棋子的这一行和这一列是否还有别的可以放棋子的地方{ for(int i = 1 ; i >sh ; ...
阅读全文
SDUT1281Cup
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1281题意 : 一个杯子,告诉你底面半径,顶端半径,杯子高度,里边装有的热水的量,让你求杯中水的高度思路 : 就是一个简单的数学公式问题,也没有什么要特别注意的地方,杯子有两种形状,圆柱和圆台,圆柱的话直接用体积除以底面积即可得,而圆台的话,就这么去求肯定是求不出来的,所以就要用间接法,就是先把圆台补全,补成一个大圆锥,通过求小圆锥的高h0 = H*r/(R-r),就可以求出多补的小圆锥的体积v0 = (pi*h0*r*r)/3,数学上,这个小
阅读全文
POJ3250Bad Hair Day
摘要:http://poj.org/problem?id=3250题意 :n个牛排成一列向右看,牛 i 能看到牛 j 的头顶,当且仅当牛 j 在牛 i 的右边并且牛 i 与牛 j 之间的所有牛均比牛 i 矮。 设牛 i 能看到的牛数为ni,求ni的和。思路 : 表示一开始就想用数组去操作,结果说是会超时,问了别人的才知道原来要用栈啊,用栈保存,新的元素若是比栈顶元素大,就把栈里小于新元素的弹出栈#include#include#include#includeusing namespace std ;int main(){ int n ; scanf("%d",&n) ;
阅读全文
SDUT 1220 完美数
摘要:完美数 Time Limit: 1000ms Memory limit: 65536K题目描述任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。如6的所有真约数是1、2、3,而且6=1+2+3。像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。古希腊人非常重视完美数。毕达哥拉斯发现它之后,人们就开始了对完美数的研究。现在要求输出所有在m和n范围内的完美数。输入输入数据有多组,每组占一行,包括两个整数m和n(1≤m≤n≤99999999)。输...
阅读全文
POJ2513Colored Sticks
摘要:http://poj.org/problem?id=2513题意 :一些木棒,两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。思路 : 这个题的话就比较麻烦,不过倒也好理解,有并查集,树来保存字符串集合,用图论知识来解决就可以了,这个题如果把木棒看成一条边,木棒一端具有相同颜色的看成同一个点,因此可以转化成一个图中判断能否一笔画,就是给你一个无向图,让你判断是否存在欧拉路。而无向图中存在欧拉路的的条件有两个,一个是图要是联通的,二是所有节点的度为偶数度,或者奇数度节点为偶数个,其实就是两个。至于欧拉图,欧拉路什么的我就不再赘述,看了一位大神的博客写
阅读全文
偶数求和
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1242这个是SDUTOJ1242http://acm.hdu.edu.cn/showproblem.php?pid=2015HDUOJ2015题目描述有一个长度为n(nint main(){ int i, n, m, b, mark; while (scanf("%d%d", &n, &m) != EOF) { b = 2; mark = 1; for (i = 0 ; i < n / m ;...
阅读全文
POJ2002Squares
摘要:http://poj.org/problem?id=2002题意 : 就是给你很多点的坐标,任取四个,看能组成多少个不同的正方形,相同的四个点,不同顺序构成的正方形视为同一正方形。思路 : 就是一个简单的枚举,但是你要是四个点四个点的枚举因为数据量到1000,所以肯定会超时的,就两个点两个点枚举,再去判断另外两个点是否存在就可以了,百度了才知道有这样一个公式,知道两个点(x1,y1)(x2,y2)x3=x1+(y1-y2) y3= y1-(x1-x2)x4=x2+(y1-y2) y4= y2-(x1-x2)或x3=x1-(y1-y2) y3= y1+(x1-x2)x4=x2-(y1-y2) y
阅读全文
POJ1159Palindrome
摘要:http://poj.org/problem?id=1159题意 : 给定一个字符串,问最少插入多少字符,使该字符串变成回文串思路 : 设原字符串序为X,逆序列为Y,则最少需要补充的字母数 = X的len减去X和Y的最长公共子序列的长度,又是一个动态规划问题,这个题的数据范围到5000,倒不是说会超时,但是会超内存,在书上看了一个很好的方法就是滚动数组,感觉挺新鲜的,也挺厉害的,但是滚动数组只节省空间,不省时间#include#include#include#include#include#includeusing namespace std ;int dp[3][5200];int main
阅读全文
POJ2418Hardwood Species
摘要:题意 : 输入若干个树木品种,里边有的是重复的,让你统计每个品种占输入的总数量的百分比,最后按字典序输出思路 : 本题数量很大,所以采用直接统计的方式会超时,而采用的方法可以用二叉搜索树,或者用map函数或者是字典树都可以实现,呃,我想说,为什么用G++交WA了,得用C++交才对啊#include#include#includeusing namespace std ;struct node{ char name[31] ; struct node *lchild,*rchild ; int count ;//记录该结点品种出现次数}tree ;struct node *ro...
阅读全文
POJ1442Black Box
摘要:http://poj.org/problem?id=1442题意 : 题目中对给出的数字有两种操作ADD(I)操作,将ADD括号里的数字 I 加到数列里边去,然后是自动排好序的,每一个数列前边都会有一个数字ss,代表着前边GET的数量有ss个,GET就是将现有数列显现出来,然后给你N个依次要添加的数字,下边一行是M个数字,代表着每个get前边有的add的数量,然后输出这个序列中第ss个数。思路 : 因为要排序,所以就直接用优先队列就好,但是用一个不行,会超时,至于为什么,其实我也不知道,就用了两个,大小根堆一起用,把小根堆里要输出的那个数前边的数字放到大根堆里,循环操作,如果小根堆首元素小于大
阅读全文
POJ1840Eps
摘要:http://poj.org/problem?id=1840题意 : 有这样一个式子a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0,给你五个系数的值,让你找出x1,x2,x3,x4,x5的值满足这个式子,满足这个式子的方案有多少种输出思路 : 这个题的话我一开始想的就是暴搜,五个for循环,但肯定会超时啊,问了会神才知道,原来这个题变通一下就行了,既然五个for循环超时那就分开,两个和三个,a1x13+ a2x23+ a3x33= -(a4x43+ a5x53),这样去搜就可以了,哈希表存一下,还有,这个的话,若x4和x5系数和x都是50,那么50*50*50*50+5
阅读全文
SDUT1574组合数的计算(组合数)
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1574这个题,比较奇怪,是用递推去做的,我试了很多计算组合数的代码交到这个题上都是WA这个是AC代码#includelong long ch[141][141];int main(){ for(int i = 0; i < 141; i++) { ch[i][i] = ch[i][0] = 1; } for(int i = 1; i < 141; i++) { for(int j = 1; j ...
阅读全文
SDUT1586 计算组合数(组合数)
摘要:这个题数据量小,不容易超时。#includelong long fac(int n){ long long m = 1; for(int i = 1; i <= n ; i++) { m = i*m; } return m;}int main(){ int m,n,i; int a; scanf("%d",&a); for(i = 1; i <= a ; i++) { scanf("%d %d",&m,&n); long long u = fac(m)/(fac(n)*fac(m-n)); ...
阅读全文
SDUT2241计算组合数C(n,m)(组合数)
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2241这个题的代码适应性也挺强,但这个题倒不适应太多代码,不知道为什么总会出现越界 1 #include 2 3 int main () 4 { 5 int a,m,n; 6 double sum; 7 scanf("%d",&a); 8 for(int i = 1 ; i0)13 {14 sum=sum*((m*1.0)/n);15 m--;16 ...
阅读全文
SDUT1061Binomial Showdown(组合数)
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1061题意 : 表示这个题的英文没看懂,就看懂了一个warning,看着样例像组合数就算了一下,结果真是。组合数这种题,一共有好多代码,但基本各种代码放在各种题上就会出现不同的问题,要么是超时问题,或者越界问题,还有的直接WA,超时我倒是好理解,但我不明白的是为什么都是算组合数的还会出现越界和WA这样的错误,难道是数组问题?一直不太肯定,毕竟只有一种方法用了数组,递推去做的,还希望了解的朋友们能为我指点迷津啊】#include#define L
阅读全文
POJ2442Sequence
摘要:http://poj.org/problem?id=2442题意 :就是输入m个数集,每个含n个数,求从每个集合取一个数后,按非降序输出前n小的和。思路 : 本来打算是用几个for循环的,后来觉得要是真这么简单就不会在堆里分类了,所以,经过会神详细指导讲解,略懂略懂,弄俩优先队列,正好搞定 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std ; 7 const int maxn = 2005 ; 8 int main() 9 {10 int n ;11 scanf("%d"
阅读全文
POJ2151Check the difficulty of problems
摘要:题意 : 举办一次比赛不容易,为了不让题目太难,举办方往往希望能够讲出的题目满足两点,1是所有的队伍都至少能够解出一个题目,2是冠军队至少能解出确定数量的题目,最后让你求的是每个队伍至少解出一道题并且冠军队伍解出N道题的概率.思路 : 我觉得吧,搞ACM不容易,唉,概率这玩意儿,一不小心漏掉一个就完啦。。。。首先呢,概率得好好求,其次呢DP得会一些。。。。这个题的思路我觉得小优姐的CSDN已经说得很详细了http://blog.csdn.net/lyy289065406/article/details/6648579样例解释 :2 2 20.9 0.91 0.9第一行M,T,N代表着M道题,T
阅读全文
POJ2299Ultra-QuickSort
摘要:http://poj.org/problem?id=2299题意 : 排序,求排序次数,本来以为用冒泡可以搞定,事实上,那么大的数据以及一个TLE告诉我,会超时.........思路 : 问了一下,这个题就是归并排序求逆序数,可以百度一下,看了白皮书#include#include#includeusing namespace std ;int A[500400],T[500400];long long cnt ;void merge_sort(int* A,int x,int y,int* T){ if(y-x>1) { int m = x+(y-x)/2 ; ...
阅读全文
POJ3080Blue Jeans
摘要:http://poj.org/problem?id=3080题意 : 给你几个DNA序列,让你找他们的共同的最长的子串,若是子串长度小于3,就输出no significant commonalities,否则就输出公共的那个子串,若是多个子串长度相同,就输出字典序最小的那一个子串。思路 : 这个题的话就暴搜加枚举。。。。。。 1 #include 2 #include 3 #include 4 using namespace std ; 5 int main() 6 { 7 char ch[110][110],sh[110],zh[110]; 8 int m ; 9 s...
阅读全文
POJ3253Babelfish
摘要:http://poj.org/problem?id=3253就是一个哈夫曼树,题目下边有提示,所以题意还是好理解的#include#include#include#includeusing namespace std;int main (){ map tra; char s[100011], str[100011], s1[100011]; while (gets(s)&&s[0]) { sscanf(s,"%s %s",str,s1);//将输入的字符串,空格前边的赋给str串,后边的赋给s1串 tra.insert(pair(s1,str...
阅读全文
POJ1611The Suspects
摘要:http://poj.org/problem?id=1611这个题的话一看就知道是并查集,0号是已经被感染的,凡是与0号在一组的都是感染者 1 #include 2 #include 3 #include 4 using namespace std ; 5 int bing[30100],a[30100]; 6 int findx(int x) 7 { 8 int r = x ; 9 while(bing[r] != r)10 r = bing[r] ;11 return r ;12 }13 int findy(int x)//递归往下找一组的14 {1...
阅读全文
POJ 1125 Stockbroker Grapevine(floyd)
摘要:http://poj.org/problem?id=1125题意 :就是说想要在股票经纪人中传播谣言,先告诉一个人,然后让他传播给其他所有的经纪人,需要输出的是从谁开始传播需要的时间最短,输出这个人的编号和传播需要的最短的时间;思路 : 典型的最短路问题,就是求最短传播时间,用floyd求出两两最短路。一般来说,因为告诉一个经纪人之后,他可以同时给其他他可以传播的所有人进行传播,所以,只要找到他需要传播的许多人中,找那个传播时间最长的,就能保证他可以给所有他能传播的人都传播到这个谣言,而其余他不能传播到的人,就要靠已传播的人继续往下传播。找n个人中以每个人为开始点的时候传播到所有人中的最长的那
阅读全文
POJ 2253 Frogger(floyd)
摘要:http://poj.org/problem?id=2253题意 : 题目是说,有这样一只青蛙Freddy,他在一块石头上,他呢注意到青蛙Fiona在另一块石头上,想去拜访,但是两块石头太远了,所以他只有通过别的石头跳过去,所以,从他的石头到Fiona的石头每一条可走的路,假设是n条,就需要你求出frog distance,这个所谓的距离就是指这n条路中,每条路选取组成这条路中最长的那边,最后一共有n条边,找这n条边里最短的那一条输出。思路 : 就是一个最短路的问题,不过不需要求最短路的权值和,只需要求出最大跳即可,还要注意,不管几行坐标,前两行分别是Freddy的位置和Fiona的位置,最后
阅读全文
POJ 1062 昂贵的聘礼(Dijkstra)
摘要:题意 : 真真是做POJ第一次遇到中文题,好吧,虽然语言通了,我一开始也没看懂样例什么意思,题意的话就是说这个探险家想娶酋长的女儿,但是没有钱,酋长说他可以用祭司的水晶球或者皮袄来换取少花一部分钱,同样的祭司也提出了类似的要求。最后输出能够花的最少的钱去迎娶酋长的女儿。这个题需要注意的点是:1.等级问题,等级相差过大的话,不与探险家交换; 2.而每一个物件,编号自1到n是已经默认的,所以不用再去赋值或者迷惑了。。思路 :就是一个最短路的问题,Dijkstra还有 Bellman ford 以及spfa都可以去求,不过倒是不知道为什么,大神们统一用的Dijkstra去...
阅读全文
POJ 3259 Wormholes(SPFA)
摘要:http://poj.org/problem?id=3259题意 : 农夫约翰农场里发现了很多虫洞,他是个超级冒险迷,想利用虫洞回到过去,看再回来的时候能不能看到没有离开之前的自己,农场里有N块地,M条路连接着两块地,W个虫洞,连接两块地的路是双向的,而虫洞是单向的,去到虫洞之后时间会倒退T秒,如果能遇到离开之前的自己就输出YES,反之就是NO。样例解释 :23 3 11 2 21 3 42 3 13 1 33 2 11 2 32 3 43 1 8第一行中的2代表有两组测试数据,第一组测试数据中,3,3,1代表着有3块地,3条路,1个虫洞,下面三行代表着编号几到几的权值是几,最后一行代表的是通
阅读全文
POJ 2240 Arbitrage(floyd)
摘要:http://poj.org/problem?id=2240题意 : 好吧,又是一个换钱的题:套利是利用货币汇率的差异进行的货币转换,例如用1美元购买0.5英镑,1英镑可以购买10法郎,一法郎可以购买0.21美元,所以0.5*10*0.21 = 1.05,从中获利百分之五,所以需要编写一个程序,在进行完转换之后能不能获利,如果能就输出Yes,反之No;样例解释 :3USDollarBritishPoundFrenchFranc6USDollar 0.5 BritishPoundUSDollar 4.9 FrenchFrancBritishPound 10.0 FrenchFrancBritis
阅读全文
POJ2485Highways
摘要:http://poj.org/problem?id=2485题意 : 这道题和1258很像,但是这道题求的是最小生成树中最大的那条边,所以在函数里处理一下就行了。思路 : 赤裸裸的最小生成树啊,但是这道题一定要注意,因为底下有提醒,一定要用scanf输入,结果我就很悲剧的没看到啊,然后一直改一直改,到最后又去看了一遍题才发现要用scanf啊,╮(╯▽╰)╭ 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int ans,dis[5005][5005]; 7 const int INF = 1 low[j]
阅读全文
POJ1789Truck History
摘要:题意 : 说实话,题意我没看懂,后来让人给我讲的样例。。。。。 4aaaaaaabaaaaaaabaaaaaaabaaaa0这个样例的话,就是输入n下面n行,每行7个字母,让你依次选两行进行比较,不同的有多少个,所以题目中给的样例,1,2行一个不同的,1,3行一个不同的,1,4行一个不同的,所以距离是3,2,3行两个不同的,2,1行一个不同的,2,4行两个不同的,距离是4,这样找下去,可以构成一个无向图,找最小生成树。解题思路 : 其实就是一个转化问题,将给的字符串转化成距离的二维数组再找最小生成树即可 1 #include 2 #include 3 #include 4 #include 5
阅读全文
最小生成树模板
摘要:最小生成树的算法有两种,一种是prim,另一种是kruskal。prim模板: 1 int prim() 2 { 3 //low数组用来保存非生成树中各顶点与生成树中顶点最短边的权值;dis数组则是你输入的数组矩阵 4 int ans = 0, i, j, flag, min; 5 ...
阅读全文
POJ1258Agri-Net
摘要:http://poj.org/problem?id=1258题意 : john当上了镇长,打算给每个农场都连接网络,需要用最小的成本连接其他所有农场,所以要找最少的纤维连在一起,任何两个农场之间的距离不超过十万。输入n,下面有n行n列,代表着每两个农场的距离,对角线为0,因为自己到自己是为0;解题思路 : 这个题要包含所有的农场,赤果果的最小生成树,这个题的话,注意是多组输入还有数组不要开得太小,算法的话prim和kruskal都可以,我用的是prim。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 i
阅读全文
POJ1860Currency Exchange(SPFA)
摘要:http://poj.org/problem?id=1860题意: 题目中主要是说存在货币兑换点,然后现在手里有一种货币,要各种换来换去,最后再换回去的时候看能不能使原本的钱数增多,每一种货币都有对应的汇率,而货币A到货币B的汇率即为1货币A换得得货币B的数量,但兑换点是要收取佣金的,且佣金从源货币中扣除,例如,你想在汇率29.75,佣金为0.39的兑换点把100美元换成卢布,得到的卢布数即为(100-0.39)*29.75 = 2963.3975.样例解释:3 2 1 20.0 1 2 1.00 1.00 1.00 1.002 3 1.10 ...
阅读全文
POJ3083Children of the Candy Corn
摘要:题意:给你一个迷宫,入口处标为S,出口处标为E,可以走的地方为“.”,不可以走的地方为#,求左转优先时从出口到入口的路程,再求右转优先时,出口到入口的路程,最后求从出口到入口的最短路程。思路:求前两个的时候用DFS递归求解能走的路就OK,求最短的时候当然要用广度优先搜索啦。 1 #include 2 #include 3 #include 4 using namespace std ; 5 char ch[158][158]; 6 int sum ;//总步数 7 int h,w,i,j,k ; 8 int enx,eny,stax,stay; 9 int fx[] = {0...
阅读全文
POJ2503Babelfish
摘要:http://poj.org/problem?id=2503这个题一开始是想用字典树,发现太麻烦。。。。。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 int main () 7 { 8 map tra; 9 char s[100011], str[100011], s1[100011];10 while (gets(s)&&s[0])11 {12 sscanf(s,"%s %s",str,s1);//输入一个字符串,空格前的存到str里边,后边的存到s...
阅读全文
POJ 2993Emag eht htiw Em Pleh
摘要:http://poj.org/problem?id=2993这个题与POJ2996正好反着,但个人认为,比2996好做多了,那些边边框框都挺容易输出的,剩下的注意p别忘了给输进去就行,还有白色的是大写,黑色的是小写; 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std ; 7 struct node 8 { 9 int row,col;//列 10 char ch ; 11 }sh[168]; 12 char s1[1006]; 13 int cnt; 14 ...
阅读全文
POJ2996Help Me with the Game
摘要:http://poj.org/problem?id=2996又是一个大模拟题,表示做模拟题做的恶心,这个题主要是对数据的处理,从表格中将数据取出来再进行处理即可。主要注意的点就是:1.KQRBN五个大写字母输出的顺序,且p不输出。 2.输出白色的时候,按列升序排,列相同时按行升序排,黑色的是按列降序排,列相同的时候按行升序排。 3.最后是不用输出逗号的,这个用一个标记变量标记一下就行。 1 #include 2 #include 3 #include 4 using namespace std; 5 char cont[] = "KQRBNP"; 6...
阅读全文
POJ3295Tautology
摘要:http://poj.org/problem?id=3295 1 #include 2 #include 3 #include 4 #include 5 using namespace std ; 6 stackQ; 7 int p,q,r,s,t ,i,j; 8 int a,b,flag; 9 int judge(char ch,int p,int q, int r,int s,int t) 10 { 11 switch(ch) 12 { 13 case 'p':Q.push(p);return 1; 14 case 'q':...
阅读全文
POJ1573Robot Motion
摘要:http://poj.org/problem?id=1573 1 #include 2 #include 3 #include 4 5 int main() 6 { 7 int step[15][15],n,m,x,y,s; 8 int visit[15][15]; 9 char map[15][15];10 while(scanf("%d%d%d",&n,&m,&y),n||m||y)11 {12 /*for(int i=1;in || y>m)44 {45 printf("%d...
阅读全文
POJ1068Parencodings
摘要:http://poj.org/problem?id=1068这个题的话就是先把给出来的一串数字转化成括号,再把括号转化成要求的,最后输出就行了#include#include#include#include#include#includeusing namespace std ;int main(){ stackQ; queuep,q; int n; cin>>n; for(int i = 1 ; i >m; int a[66]; for(int j = 1 ; j >a[j] ; if(j == 1) ...
阅读全文
2013年山东省第四届ACM大学生程序设计竞赛 Alice and Bob
摘要:Alice and BobTime Limit: 1000ms Memory limit: 65536K题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is apolynomial like this:(a0*x^(2^0)+1) * (a1* x^(2^1)+1)*.......*(an-1* x^(2^(n-1))+1). Then Alice ask Bob Q questions. In theexpansion of the Polynomial, Gi..
阅读全文
POJ2632Crashing Robots
摘要:做模拟题做的我直接睡着了,题并不难,就是一个细心的问题,有一些细节问题注意了就差不多了,代码写的精美的一般找错误也好找一些,应该学着些好看的代码 1 #include 2 #include 3 #include 4 using namespace std ; 5 int len,high; 6 int a,b,j ; 7 struct node 8 { 9 int x; 10 int y ; 11 int dire; 12 } s[10001]; 13 int judge(int k) 14 { 15 int i; 16 if(s[k]...
阅读全文
POJ1328Radar Installation
摘要:http://poj.org/problem?id=1328题的大意就是说在海里有小岛,坐标位置会给出,需要岸边的雷达覆盖所有的小岛,但雷达的覆盖范围有限,所以,需要最少的雷达覆盖所有的小岛,但若是有小岛没法被雷达给覆盖到,就输出-1;这个题的话可以转化成区间问题就是看雷达的覆盖范围作为半径,A若是小岛的位置,根据雷达的覆盖范围只要不小于这个点的Y坐标,那个覆盖范围就是这个三角形的斜边,所以只要雷达位于1,2边上就可以覆盖到这个小岛 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespa
阅读全文
POJ2586Y2K Accounting Bug
摘要:http://poj.org/problem?id=2586DescriptionAccounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some vital data for preparing annual report for MS Inc.All what they remember is that MS Inc. posted a surplus or a deficit each month of 1999 and each month when MS Inc. posted
阅读全文
POJ2965The Pilots Brothers' refrigerator
摘要:http://poj.org/problem?id=2965这个题的话,一开始也不会做,旁边的人说用BFS,后来去网上看了众大神的思路,瞬间觉得用BFS挺简单易;因为要让一个“+”变为“-”,只要将加号所在的位置(i,j)的行和列上的7个元素全部改变一次,这样的话(i,j)这个点将会变化7次,而 i 行上和 j 列另外六个元素将会变化4次,剩下的那些会变化2次,显而易见的是,一个位置上若翻转偶数次相当于没翻转,所以,只要记录下奇数次的翻转进行相加就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std ; 6
阅读全文
SUDT2177体检
摘要:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2177题目描述 大家都知道,新生入学的前几周要体检,体检的那一天 HH 早起(九点半)来到了校医院,但是到了之后她发现排队等候体检的人太多了,而且人数在不断的增加。体检需要检查许多个项目,每个项目都需要排队,而且随着时间的推移,每个队列的人数都在慢慢增加。已知每个体检项目的队列都有两个属性(ai, bi):1、如果 HH 在 0 时刻站在了这个队列后,那么她需要 ai 秒就可以完成这个项目的体检;2、如果 HH 没在这个队列中,那么 HH 完成
阅读全文
POJ1013Counterfeit Dollar
摘要:这个题主要是判断硬币真假,可能轻可能重,称三次,要输出哪枚是假币,还要输出是重的还是轻的,所以最主要的是标记变量 1 #include 2 #include 3 #include 4 #include 5 using namespace std ; 6 7 int main() 8 { 9 int n ;10 while(cin>>n )11 {12 int a['L'+3] ;13 for(int k = 1 ; k >ch>>sh>>ju;20 if(strcmp(ju,"even")==0)21 ...
阅读全文
POJ1008Maya Calendar
摘要:http://poj.org/problem?id=1008&lang=default&change=true这个题倒是不难,就是麻烦一点,但是还WA了几次都是因为处理天数的时候没处理好,因为Haab这个日历日期是从0开始的,所以当第一年的最后一天第364天,而如果输入的恰好是365天应该是第二年的,所以,那个天数要放在下面处理 1 #include 2 #include 3 #include 4 using namespace std ; 5 int main() 6 { 7 int n ; 8 scanf("%d",&n) ; 9 printf(
阅读全文
POJ1004Financial Management
摘要:这个题犯了一个小小的错误,double输出的时候用f才对,输入用lf即可。。。。http://poj.org/problem?id=1004 1 #include 2 int main() 3 { 4 5 double a[13],sum,ave; 6 int i; 7 sum=0; 8 for(i=0; i<=11; i++) 9 {10 scanf("%lf",&a[i]);11 sum+=a[i];12 }13 ave=sum/...
阅读全文