标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2130 Accepted Submission(s): 747
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<cstdlib> #include<algorithm> using namespace std; #define maxn 1000000 char str[10]; int sg[maxn],n; int get(int x) { if(x/100000) return 6; if(x/10000) return 5; if(x/1000) return 4; if(x/100) return 3; if(x/10) return 2; return 1; } void dfs(int x) { int len=get(x); for(int i=1;i<=len;i++) { int m=x; int base=1; for(int j=1;j<i;j++) base=base*10; int temp=(m%(base*10))/base; for(int j=temp;j<9;j++) { m+=base; sg[m]=1; } } if(len!=6) { int m=x; int base=1; for(int i=len;i<6;i++) { m=m*10; for(int j=0;j<base;j++) { sg[m+j]=1; } base=base*10; } } } void fun() { memset(sg,0,sizeof(sg)); sg[0]=1; for(int i=1;i<maxn;i++) { if(!sg[i]) dfs(i); } } int main() { fun(); while(scanf("%s",str)!=EOF) { if(str[0]==‘0‘) { printf("Yes\n"); continue; } int len=strlen(str); n=0; for(int i=0;i<len;i++) { n=n*10; n=n+str[i]-‘0‘; } if(sg[n]) printf("Yes\n"); else printf("No\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4378939.html