摘要:
/*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
找回失去的
阅读(272)
推荐(0)
编辑
摘要:
/*第一步判断是不是先手必败非先手必败的话必有解,则输出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
找回失去的
阅读(225)
推荐(0)
编辑
摘要:
/*[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
找回失去的
阅读(203)
推荐(0)
编辑
摘要:
/*当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
找回失去的
阅读(295)
推荐(0)
编辑