HDU 4435 charge-station
摘要:2012天津赛区现场赛的E题,刚才做模拟比赛的时候和安神讨论了很久,思路没理清。大致题意是 给出N个点,让你选择性地建立加油站,在第i个点建立加油站的费用为2^i-1,要使自己能从1号点经过所有点回到原点,点可以重复经过,加油费用不计,每次加油最多能跑的距离为D。输出的答案是2进制,由费用10进制转化过来就是在第i个点建立加油站,答案从右往左数第i个值就为1。第一步判断所有点都建立加油站能不能完成题目的要求,不能输出-1。能完成要求的话,我们注意到建站费用是和点的编号有关的,比如第i个点建站的费用是等于前i-1个点都建站的费用+1,二进制的规律。然后我们可以从后往前判断当前加油站能不能拆。di
阅读全文
posted @
2012-10-28 21:25
找回失去的
阅读(700)
推荐(0)
HDU 3032 Nim or not Nim?
摘要:/*g(0)=0,g(1)=1。状态2的后继有0,1和(1,1),它们的SG函数值分别是0,1和0,所以g(2)=2。状态3的后继有0,1,2和(1,2),它们的SG函数值分别是0,1,2和3,所以g(3)=4。状态4的后继有0,1,2,3,(1,3)和(2,2),它们的SG函数值分别是0,1,2,4,5和0,所以g(4)=3。我们推测:对于所有的k>=0,有g(4k+1)=4k+1;g(4k+2)=4k+2;g(4k+3)=4k+4;g(4k+4)=4k+3。*/#include <stdio.h>int main(){ int T; scanf("%d"
阅读全文
posted @
2012-10-22 17:09
找回失去的
阅读(277)
推荐(0)
HDU 2176 取(m堆)石子游戏
摘要:/*第一步判断是不是先手必败非先手必败的话必有解,则输出sg为0的点*//*Accepted 2176 109MS 972K 687 B G++ Yu*/#include <stdio.h>const int MAXM = 200200;int a[MAXM];int main(){ int ans; int m; while(scanf("%d", &m), m) { ans = 0; for(int i = 0; i < m; i ++) { scanf("%d", ...
阅读全文
posted @
2012-10-22 16:43
找回失去的
阅读(231)
推荐(0)
HDU 2897 邂逅明下
摘要:/*[1-p]必败 [p+1,p+q]必胜(取一个q,就能进入第一个区间)[p+q+1,2*p+q]必败,[2*p+q+1,2*p+2*q]必胜*///对p+q取余即可#include <stdio.h>int main(){ int n, p, q; while(scanf("%d%d%d", &n, &p, &q) != EOF) { int ret = n % (p + q); if(ret >= 1 && ret <= p) puts("LOST"); else puts("
阅读全文
posted @
2012-10-22 13:33
找回失去的
阅读(207)
推荐(0)
HDU 2516 取石子游戏
摘要:/*当n为1的时候是输出first,n为2的时候输出second,3的时候也是输出second,当n为4的时候,第一个人想获胜就必须先取一个,这是剩余的石子数为3,此时无论第二个人如何取,第一个人都能够赢,当n为5的时候,first不可能获胜,因为他取2时,second直接取掉剩余的3个,取1时,second也是取1,这样就演变为n为3的时候了,所以n为5时候,输出的是second ,当n为6的时候,first只要取掉1个,就可以让局势变为n为5的时候,输出的是first,n为7的时候,first取掉2个,又可以变为5的时候,所以也是输出first,n为8的时候,当first取1个时候,局势变
阅读全文
posted @
2012-10-22 13:06
找回失去的
阅读(305)
推荐(0)
HDU 2147 kiki's game
摘要:/*Accepted 2147 0MS 200K 173 B C++ Yu */#include <stdio.h>//n和m不同为奇数,先手胜int main(){ int n, m; while(scanf("%d%d", &n, &m), n + m) { puts( ((n & 1) && (m & 1))? "What a pity!" : "Wonderful!"); } return 0;}
阅读全文
posted @
2012-10-20 11:53
找回失去的
阅读(113)
推荐(0)
HDU 1564 Play a game
摘要:/*Accepted 1564 0MS 200K 135 B C++ Yu */#include <stdio.h>//画图YY//奇数先手赢,反之后手int main(){ int n; while(scanf("%d", &n), n) { puts(n & 1 ? "ailyanlu" : "8600"); } return 0;}
阅读全文
posted @
2012-10-20 11:27
找回失去的
阅读(132)
推荐(0)
HDU 1846 Brave Game
摘要:/*巴什博弈当取的石子总数为b + 1的倍数时,先取必败,因为对手每次都能凑出b + 1的倍数,通过取1......b的一种情况。*/#include<stdio.h>int main(){ int a, b, t; scanf("%d", &t); while(t --) { scanf("%d%d", &a, &b); a = a % (b + 1); puts((a) ? "first" : "second"); } return 0;}
阅读全文
posted @
2012-10-20 11:13
找回失去的
阅读(180)
推荐(0)
HDU 1847 Good Luck in CET-4 Everybody!
摘要:/*巴什博弈我们注意到可以取的牌数包含了1和2这两种情况,剩下的不用管,当你给对手剩下3*n张牌时,你就赢了。巴什博弈的模型..*/#include<stdio.h>int main(){ int n; while(scanf("%d", &n) == 1) { puts(n % 3 == 0 ? "Cici" : "Kiki"); } return 0;}
阅读全文
posted @
2012-10-20 11:12
找回失去的
阅读(128)
推荐(0)
HDU 1848 Fibonacci again and again
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXN = 1005;int fib[MAXN], e[MAXN], h[20];void calcFib(){ int i; fib[1] = 1, fib[2] = 2; for(i = 3; i <= 16; i ++) { fib[i] = fib[i - 1] + fib[i - 2]; }}/*求SG值*/void calcE(){ int i, j, k; e[0] = 0, e[1] = 1; ...
阅读全文
posted @
2012-10-20 11:11
找回失去的
阅读(157)
推荐(0)
HDU 1849 Rabbit and Grass
摘要:/*转换成Nim模型,对于每个棋子位于的位置b,G[b] = 0,即sg[b] = b多个棋子异或一遍就得出答案了,为0先手必败。*/#include<stdio.h>int main(){ int n, a, b; while(scanf("%d", &n), n) { scanf("%d", &a); n --; while(n --) { scanf("%d", &b); a ^= b; } puts(a ? "Rabbit Win!" : "...
阅读全文
posted @
2012-10-20 11:07
找回失去的
阅读(203)
推荐(0)
HDU 1850 Being a Good Boy in Spring Festival
摘要:/*Nim模型*/#include<stdio.h>#include<string.h>#include<stdlib.h>const int MAXM = 105;int m, ni[MAXM];int main(){ int i, cnt, res; while(scanf("%d", &m), m) { res = cnt = 0; for(i = 1; i <= m; i ++) { scanf("%d", &ni[i]); res ^= ni[i]; } ...
阅读全文
posted @
2012-10-20 11:06
找回失去的
阅读(142)
推荐(0)
HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者
摘要:/*巴什博弈的模型*/#include<stdio.h>int main(){ int n, m, T; scanf("%d", &T); while(T --) { scanf("%d%d", &n, &m); puts((n % (m + 1)) ? "Grass" : "Rabbit"); } return 0;}
阅读全文
posted @
2012-10-20 11:04
找回失去的
阅读(168)
推荐(0)
HDU 2149 Public Sale
摘要:/*巴什博弈先判断是不是先手必败*/#include<stdio.h>int main(){ int m, n, i; while(scanf("%d%d", &m, &n) != EOF) { if(m > n) //这种情况先手非必败的话只有一种出法 { if(m % (n + 1) == 0) { puts("none"); continue; } else prin...
阅读全文
posted @
2012-10-20 11:01
找回失去的
阅读(193)
推荐(0)
POJ 1061 青蛙的约会
摘要:得到算式 x + z * m- (y + z * n) = k * Lx- y + z * (m - n) = k * L即z * (n - m)+ k * L = x - y可以用扩展欧几里德了/*Accepted 164K 0MS C++ 633B 2012-10-09 23:38:48 */#include <stdio.h>#include <string.h>#include <stdlib.h>typedef long long LL;LL extgcd(LL a, LL b, LL &x, LL &y){ if(b == 0)
阅读全文
posted @
2012-10-09 23:56
找回失去的
阅读(186)
推荐(0)
国庆七天乐 Day7
摘要:今天做的是湖南省2010年省赛题,悲催的只出了四题...今年省赛堪忧!先做Codeforce去了...A:汽水瓶有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?推算一下会发现最后的答案是n/2。#include <stdio.h>int main(){ /
阅读全文
posted @
2012-10-07 23:41
找回失去的
阅读(974)
推荐(0)
国庆七天乐 Day6
摘要:今天做的是湖大2010年的校赛,说实话,这套题对我来说还是很难的。直到224分钟才签到。大叔还戏称文件夹取名不好,AK,结果只出了A和K两道水题...先占个地方去睡觉,明天补全A:Convolution Codes这道题题目很长,放上来了卷积公式,当时认为不会就没看,结果到后面发现不得不看了。大致意思就是给出两个长度为7的序列,P1,P2,然后输入一个序列A,长度1000以内,定义B = A 和P1的卷积,C=A和P2的卷积,然后按照B1C1B2C2这样的顺序输出,这也暴露了我的一个问题,发现题目长不敢去看题,其实有时候这是水题。#include <stdio.h>#include
阅读全文
posted @
2012-10-06 23:55
找回失去的
阅读(198)
推荐(0)
国庆七天乐 Day5
摘要:今天做的是第五届河南省省赛,我挫到爆了,只出了三题,都是水题,个人赛垫底。先总结一下,今天写最水的A题居然WA了两次,关键是调了半个小时,浪费了不少时间,也影响了心情。然后做的是同样水的F题,还好敲的比较快,也顺利一A。然后剩下三个多小时在梦游,将D题敲到了200多行,WA了2次,中途去写了G题,结果题意看错了,WA了1次,看各位大牛已经A到了7题,又回来写D题,还是WA,最后才想到B题过的人也那么多,所以去写B题,WA了两次才A。惨不忍睹!A:奇怪的排序将一个数组的所有数翻转,然后从小到大排序,输出排序后的结果,例如13翻转成31,超级水的一道题,真心不应该#include <stdi
阅读全文
posted @
2012-10-05 17:11
找回失去的
阅读(253)
推荐(0)
国庆七天乐 Day4
摘要:今天做的是吉林的省赛,我们队最后出了六题,其他队都是七题以上,感觉我坑了。A:Welcome, 2008这是一道签到题吧,陈兴看完就敲了,顺利一A。我后面也写了一下:#include <stdio.h>int main(){ int n, h; while(scanf("%d", &n), n) { h = n << 1 | 1; for(int i = 1; i <= h; i ++) { if(i == 1 || i == n + 1 || i == (n << 1 | 1)) { ...
阅读全文
posted @
2012-10-04 23:53
找回失去的
阅读(212)
推荐(0)
国庆七天乐 Day3
摘要:今天做的是山东第一届省赛,题目比昨天的容易,但是还是出了五道题,难道难题都只能叫大叔来做?A:Phone Number给出N个字符串,判断是否存在一个字符串是另一个字符串的前缀,之前做过一道类似的题,字典树判断前缀确实很方便。#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct{ int next[10]; int alr, end;}Trie;Trie t[110000];int tp, n;int insert(char *x, int site){ if(t[site].
阅读全文
posted @
2012-10-03 16:56
找回失去的
阅读(200)
推荐(0)
国庆七天乐 Day2
摘要:今天做的是辽宁2010年的省赛题。题目难度比昨天容易了不少。悲哀的是,我们队只把前四道水题做出来了,后面还有两道相对容易的题没做出来。A :DinnerA题是我敲的,开始看到题的时候还愣了一下,后面看到hint的提示,才发现如此之水。题意大致是给你N个盒子,盒子里面放着一样东西,如果是餐具就输出,注意下格式就可以,餐具在hint中给出了,才四种...#include <stdio.h>#include <string.h>#include <stdlib.h>const char table[][15] = {"bowl", "
阅读全文
posted @
2012-10-02 15:46
找回失去的
阅读(178)
推荐(0)
国庆七天乐 Day1
摘要:国庆这几天都是做比赛,从今天的情况来说,感觉我还是弱了一点,有些该出的题没做出来,模拟题做得比较少,该考虑的情况没有考虑,所以E题写了一半,脑子就乱了没写下去,交给了队友。有一种感觉是学了的东西用不上,或者说不会用,还有好多东西没学。POJ 3311Hie with the Pie这道题其实隽遒学弟的思路没有错,先floyd求出任意两点间的最短路,然后就是旅行商问题(哈密顿回路),也可以说是状态压缩DP。最多一共就2的11次方乘以10种状态,用f[i][j]表示第i种状态处于j点的最小代价,我们要求的就是f[(1 <<(n + 1) - 1)[0],从零点出发回到零点。#inclu
阅读全文
posted @
2012-10-01 23:43
找回失去的
阅读(207)
推荐(0)