HDU 1404 Digital Deletions
一串由0~9组成的数字,可以进行两个操作:1、把其中一个数变为比它小的数;2、把其中一个数字0及其右边的所以数字删除。
两人轮流进行操作,最后把所以数字删除的人获胜,问前者胜还是后者胜。
字符串长度为1-6,前者胜输出Yes,否则输出No.
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const int INF=0x3f3f3f3f; 11 const double eps=1e-5; 12 typedef long long ll; 13 #define cl(a) memset(a,0,sizeof(a)) 14 #define ts printf("*****\n"); 15 const int MAXN=1000000; 16 int m,tt; 17 bool sg[MAXN]; 18 void fun(int n) 19 { 20 int i,j,k; 21 char ss[10]; 22 sprintf(ss,"%d",n); 23 int len=strlen(ss); 24 for(i=0;i<len;i++) //在每位上添加数字 25 { 26 int temp=n; 27 char tss[10]; 28 strcpy(tss,ss); 29 while(tss[i]<‘9‘) 30 { 31 tss[i]+=1; 32 sscanf(tss,"%d",&temp); 33 sg[temp]=1; 34 } 35 } 36 if(len!=6) 37 { 38 int temp=n; 39 int base=1; 40 for(i=len;i<6;i++) 41 { 42 temp*=10; 43 for(j=0;j<base;j++) 44 { 45 sg[temp+j]=1; 46 } 47 base*=10; 48 } 49 } 50 } 51 void init() 52 { 53 sg[0]=1; 54 for(int i=1;i<MAXN;i++) 55 { 56 if(!sg[i]) 57 { 58 fun(i); 59 } 60 } 61 } 62 int main() 63 { 64 int i,j,k,ca=1; 65 #ifndef ONLINE_JUDGE 66 freopen("1.in","r",stdin); 67 #endif 68 cl(sg); 69 init(); 70 char s[10]; 71 while(scanf("%s",s)!=EOF) 72 { 73 int n=0; 74 if(s[0]==‘0‘) 75 { 76 printf("Yes\n"); 77 continue; 78 } 79 int len=strlen(s); 80 for(i=0;i<len;i++) 81 { 82 n*=10; 83 n+=s[i]-‘0‘; 84 } 85 if(sg[n]) printf("Yes\n"); 86 else printf("No\n"); 87 } 88 }
时间: 2024-12-11 17:48:28