hdu 1404 Digital Deletions
来源:互联网 发布:filmconvert pro mac 编辑:程序博客网 时间:2024/05/21 10:19
这题我先建了表来做的。
可以进行两个操作:
1、把其中一个数变为比它小的数;
2、把其中一个数字0及其右边的所以数字删除。
两人轮流进行操作,
//Time 281ms, Memory 4140
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1000000;int sg[maxn]={0};int len(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 mex(int n){ int l=len(n); for(int i=l;i>0;i--) //1、把其中一个数变为比它小的数; { int m=1; for(int j=1;j<i;j++) m*=10; int t=(n%(m*10))/m; for(j=1;j<=9-t;j++) sg[n+m*j]=1; } if(l<6) //2、把其中一个数字0及其右边的所以数字删除。 { int m=n,a=1; for(int i=1;i<=6-l;i++) { m*=10; for(int j=0;j<a;j++) { sg[m+j]=1; } a*=10; } }}void f(){ sg[0]=1; for(int i=1;i<maxn;i++) if(!sg[i]) // 这方法与素数筛选法有异曲同工之妙。 { mex(i); }}int main(){ int l,n; char s[7]; f(); while(scanf("%s",s)!=EOF) { if(s[0]=='0') { printf("Yes\n");continue; } l=strlen(s); n=s[0]-'0'; for(int i=1;i<l;i++) n=n*10+s[i]-'0'; if(sg[n]) printf("Yes\n"); else printf("No\n"); } return 0;}
- hdu 1404 Digital Deletions
- hdu 1404 Digital Deletions
- Hdu 1404 Digital Deletions
- HDU 1404 Digital Deletions
- Digital Deletions - HDU 1404 博弈
- SG函数 hdu 1404 Digital Deletions
- sg函数 hdu 1404 Digital Deletions
- hdu 1404 Digital Deletions (SG函数)
- HDU 1404 Digital Deletions [SG]【博弈】
- hdu1404 Digital Deletions------SG
- Digital Deletions+博弈
- hdu1404 Digital Deletions
- Hdu1404 Digital Deletions
- 博弈——Digital Deletions
- hdu1404 Digital Deletions (状压+dfs)
- hdu1404 Digital Deletions SG打表
- Hdu1404 Digital Deletions(暴力SG博弈)
- HDU 1013 Digital Roots
- 智遥工作流导出Excel分析
- AIS编码1
- Salt 翻译之Grains
- JAVA获取当前进程ID
- 去掉UITableView Section上Header的粘滞效果
- hdu 1404 Digital Deletions
- php判断一个数组是另一个数组的子集
- DWR
- VC++禁止调整窗口大小的方法
- 欧拉函数
- maximo中配置数据库报错:首选项不存在: global_lexer
- 流媒体Live555学习(二)
- Sum Root to Leaf Numbers
- java知识点