摘要: 威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。 可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk= ak + k,奇异局势有如下三条性质: ... 阅读全文
posted @ 2013-08-16 21:03 执着追求的IT小小鸟 阅读(262) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1850这题里说的是尼姆博弈的问题,尼姆博弈说的是三堆,但是他的方法却可以推广到任意堆。姆博奕(Nimm Game):有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3)也是奇异局势,无论对手如何拿,接下来都. 阅读全文
posted @ 2013-08-16 20:21 执着追求的IT小小鸟 阅读(731) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2149最后一种情况需注意#includeint main(){ int n,i,m; while(scanf("%d%d",&n,&m)!=EOF) { if(n%(m+1)==0) printf("none"); else { if(m==n)printf("%d",m); else if(m>n) for(i=n;i<=m;i++)... 阅读全文
posted @ 2013-08-16 16:49 执着追求的IT小小鸟 阅读(226) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1846初学博弈论,这题是巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)*r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留. 阅读全文
posted @ 2013-08-16 16:23 执着追求的IT小小鸟 阅读(146) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1097在数论里学到了整数的快速幂,这里居然是秒过的。。。。瞬间就知道自己以前多菜了#include__int64 puzzle(__int64 a,__int64 b){ __int64 ans=1; while(b) { if(b&1) ans=ans*a%10; a=a*a%10; b/=2; } return ans;}int main(){ __int64 a,b; whi... 阅读全文
posted @ 2013-08-16 14:28 执着追求的IT小小鸟 阅读(165) 评论(0) 推荐(0) 编辑
摘要: http://acm.fzu.edu.cn/problem.php?pid=1649这里关键的问题在于数据达到了1亿亿,没办法用普通的方法进行运算,所以这里用到了米勒拉宾大素数判定方法。算法流程:根据费马小定理,a^(n-1)mod n==1,1#include#include#define MAX 10__int64 muti(__int64 a,__int64 b,__int64 m){ __int64 ans=0; while(b) { if(b&1) ans=(ans+a)%m; ... 阅读全文
posted @ 2013-08-16 11:22 执着追求的IT小小鸟 阅读(411) 评论(0) 推荐(0) 编辑