标签:http using cas close ber 技术 cte cst any
InputThe input consists of several test cases. For each case, there is a string in one line.
The length of string will be in the range of [1,6]. The string contains only digit characters.
Proceed to the end of file.
OutputOutput Yes in a line if the first player can win the game, otherwise output No.
Sample Input
0 00 1 20
Sample Output
Yes Yes No No
思路:必败态可以转移到必胜态,sg搜一下。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int MAX=1000000; int sg[MAX]; int getlength(int n){ if(n/100000) return 6; if(n/10000) return 5; if(n/1000) return 4; if(n/100) return 3; if(n/10) return 2; return 1; } void extend(int n){ int len=getlength(n); for(int i=len;i>0;i--){ int m=n; int x=1; for(int j=1;j<i;j++) x*=10; int index=(n%(x*10))/x; for(int j=index;j<9;j++){ m+=x; sg[m]=1; } } if(len<6){ int m=n; int x=1; for(int i=len;i<6;i++) { m*=10; for(int i=0;i<x;i++) sg[m+i]=1; x*=10; } } } void fun(){ memset(sg,0,sizeof(sg)); sg[0]=1; for(int i=1;i<MAX;i++) if(!sg[i]) extend(i); } int main(){ char str[8]; int n; fun(); while(scanf("%s",&str)!=EOF) { if(str[0]==‘0‘) //第一个数字是0,则前者必胜 { printf("Yes\n"); continue; } int len=strlen(str);//第一个数字非0,再转化成整型数 n=0; for(int i=0;i<len;i++) { n*=10; n+=str[i]-‘0‘; } if(sg[n]) printf("Yes\n"); else printf("No\n"); } return 0; }
标签:http using cas close ber 技术 cte cst any
原文地址:https://www.cnblogs.com/astonc/p/10026409.html