一些博弈题目分类
转:http://blog.sina.com.cn/s/blog_64135d4e0100gm2k.html
game 类 题简单分析
pku2234 Matches game
定理 令s=a1^a2^...^ak, si=s^ai, si是除ai外其余k-1个的异或
(1)若s<>0,则存在 i,将 ai缩小为si后 s=0;
(2)若s=0,则 将任何数ai做任何缩小后 s<>0;
for(i=1,s=0;i<=k;i++)
{ scanf("%d",&n);s=s^n;}
if(s==0)printf("No\n"); else printf("Yes\n"); 详细的看ecjtu1019的discuss
hdu1846 brave game. if(n%(m+1)==0)n是必败点
pku2484 A Funny Game. if(n>=3)n是必败点
hdu1851 A Simple Game
for(i=1,s=0;i<=n;i++){scanf("%d%d",&m,&l);s^=m%(l+1);}
hdu1847 GoodLuck in CET-4 Everybody.if(n%3==0)n是必败点
hdu1730 Northcott Game
hdu1517 A Multiplication Game
hdu1525 Euclid's Game pku2348
fun(int a ,int b)//a>=b
{ if( a%b==0)return 1;
k=a/b;r=a%b;//a=k*b+r 25 7 ,7 4, 11 7
if(k>1)return 1;
return 1-fun(b,r);
}
hdu2147 kiki's game
hdu1907 John 取尽者败 pku3480
if(a1=a2=...=an=1) n为奇数必败,否则s=a1^a2...^an
hdu2509 Be the Winner 取尽者败 zju1616
pku2068 nim-2n个人的game
pku1740 A New Stone Game
a1,a2,a3…………an为必败点<=>当n为偶数时,对a1--an进行从小到大或
从大到小排序,如果有a1=a2,a3=a4,…………an-1=an,
当n为奇数时以及其它的情况则必胜。
pku1704 Georgia and Bob. 将p[]排序.
s=(p[n]-p[n-1])^(p[n-2]-p[n-3])^....^(p[2]-p[1])
if(n%2==1 ) 将 ^(p[2]-p[1])改为 ^(p[1]-p[0]),p[0]=0;
pku2975 Nim-有多少种win的策略
for(i=1,num=0;i<=m;i++)
{ k=s^a[i];//s=a[1]^a[2]^...^a[n]
if(k<a[i])num++;
}
hdu2176 取(m堆)石子游戏-有多少种win的策略
pku2368 Buttons
ecjtu1006 Stone Game 放(1堆)石子游戏
f[d]=d*(d+1): 2,6,12,20,30,42,56
if(s<=f[d]&&s>f[d-1])s的必败点是 d-1;
s=1000,1000 的必败点是31,31的必败点是5,5的必败点是 1
hdu1729 Stone Game 放(n堆)石子游戏
s1,c1;s2,c2;...sn,cn;
bi是>=ci的最小必败点,ai=bi-ci; s=a1^a2^...^an
hdu2516 取(2倍)石子游戏
1,2,3,5,8,13都是必败点,斐波那契数列中的数都是必败点。
hdu2580 a simple stone game(取k倍)
a[i]=i,i<=k+1是必败点,
必败点a[i+1]=a[i]+a[p],k*a[p]>=a[i],k*a[p-1]<a[i];
pku1082 Calendar Game
hdu1848 Fibonacci again and again
hdu1536(hdu1944,pku2960,ecju1110) S-Nim
freopen("data1.in","r",stdin); S={2,3}
fclose(stdin);
ecjtu1116 Fibonacci again
F[i]=0,i是必败点; F[i]=1,i是必胜点;
i是 Fibonacci数,F[i]=1;
if(F[i]==0)
{ for(j=1;fib[j]<=i;j++)if(F[i-fib[j]]==0){F[i]=1;break;}}
nuaa1516,ecjtu1117 质数取石子
(这些只是写题目而已 就提的结题报告可能以后会挑一些转上来)