Gym - 100184A(博弈论)sg函数

Gym - 100184A(博弈论)sg函数_第1张图片

构造sg函数,每个数减2或减3;构造sg函数就是每个数都要减2和减3取mex数组中最小的数。

sg[0]=0; sg[1]=0; sg[2]=mex(sg(2-2))=mex(sg(0))=mex(0)=1;
sg[3]=mex(sg(3-3),sg(3-2))=mex(sg(0),sg(1))=mex(0)=1;
sg[4]=mex(sg(4-3),sg(4-2))=mex(sg(1),sg(2))=mex(0,1)=2;
sg[5]=mex(sg(5-3),sg(5-2))=mex(sg(2),sg(3))=mex(1)=0;
#include
using namespace std;
int sg[6];
int n,x;
int main( )
{
      sg[0]=sg[1]=0;
      sg[2]=sg[3]=1;
      sg[4]=2;
      int ans=0;
      scanf("%d",&n);
      for(int i=1;i<=n;i++)
      {
            scanf("%d",&x);
            ans^=(sg[x%5]);
      }
      if(ans==0)
      {
            printf("Watson\n");
      }
      else
      {
            printf("Rybka\n");
      }

      return 0;
}

你可能感兴趣的:(Gym - 100184A(博弈论)sg函数)