摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1536 计算sg值。 注意两个地方: 1. s是无序的。 2. 不能对n=10000打表,因为能取的个数是给定的,会有打不到的点。code:#include<cstdio>#include<cstring>ints[101],sg[10001],k;intmex(intn){if(sg[n]!=-1)returnsg[n];boolvis[101];//n最多有100个后继inti;memset(vis,false,sizeof(vis));for(i=0;i<k;i++){if
阅读全文
posted @ 2012-05-04 20:10
追逐.
阅读(252)
推荐(0)
编辑
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1847 和toj1180完全一样的题。 用sg函数写一下。将1000内的sg值打表即可。code:/*#include<cstdio>intmain(){intn;while(~scanf("%d",&n)){if(n%3)printf("Kiki\n");elseprintf("Cici\n");}return0;}*/#include<cstdio>#include<cstring>intsg[1001
阅读全文
posted @ 2012-05-04 11:01
追逐.
阅读(197)
推荐(0)
编辑
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1907 Nim的变形,最后取为败,详见http://www.cnblogs.com/tanky_woo/archive/2010/08/20/1804464.html中取火柴游戏2。 这里总结下结论: 1. 当所有堆个数都为1时,若为奇数堆,即异或不为0,则先手败,反之先手胜。 2. 非所有堆个数都为1时,则异或不为0先手胜。 用上述博文中的定义则为T0, S1, S2为必胜态,T1, S0为必败态。code:#include<cstdio>intmain(){intt,n,f,i,a,sum;s
阅读全文
posted @ 2012-05-04 10:02
追逐.
阅读(284)
推荐(0)
编辑
摘要:
http://poj.org/problem?id=1704 把数组倒置(17 14 12 9 7 6 5 1),将相邻棋子的间距视为一堆石子(2 1 2 0 0 3),那么题中所给操作即为把后一堆石子中的n个放到前一堆石子中,这样就转化为了阶梯博弈。用阶梯博弈的解法直接奇位异或就ok了。 在其他博客里还看到一种解法,从后向前两两分组,奇数个点则在最前加一个0结点。把两个结点间的间距看作一堆石子。 1.若对手移动两个中的前一个,那么后一个一定可以移动同样多的位置 2. 若对手移动两个中的后一个,那么等同于从这堆石子中拿出n个 这不就是阶梯博弈么?对偶数堆的操作可以忽视,奇数堆异或即为解。干..
阅读全文
posted @ 2012-05-04 09:46
追逐.
阅读(236)
推荐(0)
编辑