直接把所有数的sg值算出来就行了。
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1002333; 7 int sg[maxn]; 8 int st[8]; 9 int i,j,k,n,m; 10 11 int ra;char rx; 12 inline int read(){ 13 rx=getchar(),ra=0; 14 while(rx<'0'||rx>'9')rx=getchar(); 15 while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra; 16 } 17 int main(){ 18 sg[0]=0;int mx,mn; 19 for(i=1;i<=1000000;i++){ 20 mx=0,mn=10; 21 for(k=i;k;k/=10){ 22 j=k%10; 23 if(j>0&&j<mn)mn=j; 24 if(j>mx)mx=j; 25 } 26 if(mx==mn)sg[i]=!sg[i-mx]; 27 else if(sg[i-mx]&&sg[i-mn])sg[i]=0; 28 else if(sg[i-mx]!=1&&sg[i-mn]!=1)sg[i]=1; 29 else sg[i]=2; 30 } 31 for(int T=read();T;T--) 32 puts(sg[read()]?"YES":"NO"); 33 }