有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。如果你胜,你第1次怎样取子?
1 2 5 8 4 7 2 2 0 0
0 1 4 7 3 5 0 1 0 0 1 2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0) break;
if(n>m) swap(n,m);
double e=(sqrt(5.0)+1.0)/2.0;
int k=m-n;
int kk=(int)(k*e);
if(kk==n) printf("0\n");
else
{
printf("1\n");
int i;
for(i=1;i<=n;i++)
{
int a=n-i;
int b=m-i;
if(kk==a) printf("%d %d\n",a,b);
}
for(i=m;i>=0;i--)
{
int a=n;
int b=i;
if(a>b) swap(a,b);
k=b-a;
kk=(int)(k*e);
if(kk==a) printf("%d %d\n",a,b);
}
}
}
return 0;
}