#include<stdio.h>
int ans[2050];
void init()
{
int i,j,count,k;
ans[0]=0;
ans[1]=1;
k=1;j=1;
for(i=1;i<2050;)
{
k=1<<(j-1);
for(count=0;count<k&&i<2050;count++,i++){
ans[i]=j;
}
//printf("i=%d;k=%d ",i,k);
j++;
}
//for(i=0;i<2049;i++) printf("%d ",ans[i]);printf("\n");
}
main()
{
int i,j,k;
int n,num;
init();
while(scanf("%d",&n)&&n)
{
num=0;
for(i=0;i<n;i++)
{
scanf("%d",&k);
num^=ans[k];
}
if(num) printf("YES\n");
else printf("NO\n");
}
return 0;
}
典型博弈论,简单运用SG函数;通过计算SG值,我们可以发现这个规律:
每一堆石子:0 1 2 3 4 5 6 7 8 9 10 11 12 .........
对应 SG值: 0 1 2 2 3 3 3 3 4 4 4 4 4..............
那么我们就可以发现他们的对应关系,既是对应2的i次方递增的对应