HDU 取(2堆)石子游戏 2177 威佐夫博弈+尼姆博弈

来源:互联网 发布:用微信怎么传软件 编辑:程序博客网 时间:2024/05/11 14:05
#include <iostream>   取2堆#include <cmath>using namespace std;//取任意一堆的时候,为什么不对量少的那一堆取呢,因为(k2-k1)*t == k1 k1减小,这个等式永远成立不了int main(){    double t=(sqrt(5)+1)/2.0;int m,n,k,i,k1,k2,temp;while (cin>>m>>n,m+n){k=n-m;if ((int)(k*t)==m){cout<<"0"<<endl;}else{cout<<"1"<<endl;for (i=1;i<=n;i++){                k1=m-i;k2=n-i;if((int)((k2-k1)*t) == k1)cout<<k1<<" "<<k2<<endl;}for (i=n;i>0;i--){                int a=m;int b=i;if(a>b){                    temp=a;a=b;b=temp;}if((int)((b-a)*t) == a)                    cout<<a<<" "<<b<<endl;}}}return 0;}
#include <iostream>     //取m堆#include <cmath>using namespace std;int main(){    int n,a[2000],i,m,j;    while (cin>>n,n)    {    for(i=0,m=0;i<n;i++){cin>>a[i];   m^=a[i];}  if (m==0)  {   cout<<"No"<<endl;  }  else  {  cout<<"Yes"<<endl;  for (i=0;i<n;i++)  {  j=m^a[i];   if (a[i]>j)   {   cout<<a[i]<<" "<<j<<endl;   }   }     }    }return 0;}

#include <iostream>     //HDU 1849#include <cmath>using namespace std;int main(){    int n,a[1000],i,m,j;    while (cin>>n,n)    {    for(i=0,m=0;i<n;i++){cin>>a[i];   m^=a[i];}  if (m!=0)  {   cout<<"Rabbit Win!"<<endl;  }  else  {  cout<<"Grass Win!"<<endl;//   for (i=0;i<n;i++)//   {//   j=m^a[i];//    if (a[i]>j)//    {//    cout<<a[i]<<" "<<j<<endl;//    }//    }     }    }return 0;}


0 0