您的位置:首页 > 其它

hdu 1404/zoj 2725 Digital Deletions 博弈论

2013-09-20 22:26 232 查看
暴力打表!!

代码如下:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#define M 1000000
#define ll __int64
using namespace std;
int sg[1000000];
int get_len(int n)
{
if(n>=100000) return 6;
else if(n>=10000) return 5;
else if(n>=1000) return 4;
else if(n>=100) return 3;
else if(n>=10) return 2;
else return 1;
}
void solve(int n)
{
int len=get_len(n);
for(int i=len;i>0;i--){
int m=n,b=1;
for(int j=1;j<i;j++) b*=10;
int t=m%(10*b)/b;
for(int j=t;j<9;j++){
m+=b;
sg[m]=1;
}
}
if(len<6){
int m=n,b=1;
for(int i=len;i<6;i++){
m*=10;
for(int j=0;j<b;j++)
sg[m+j]=1;
b*=10;
}
}
}
void init()
{
memset(sg,0,sizeof(sg));
sg[0]=1;
for(int i=1;i<=999999;i++)
if(!sg[i]) solve(i);
}
int main()
{
int i,j,k,m,n,ca=0;
init();
char a[7];
while(scanf("%s",a)!=EOF){
bool f=1;
if(a[0]!='0'){
int t=atoi(a);
f=sg[t];
}
puts(f?"Yes":"No");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: