记录编号 |
44413 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[顾研NOIP] 幸运之数 |
最终得分 |
100 |
用户昵称 |
feng |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.746 s |
提交时间 |
2012-10-18 18:24:57 |
内存使用 |
56.55 MiB |
显示代码纯文本
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
int n,a,b,o,p;
int f[1000000][12];
long long s[1000000];
int w[12];
void dfs(int x,int k,int i){
if (x==0){
o++;
for (int kk=1;kk<=i+1;kk++)
f[o][kk]=w[kk];
}else{
int tmp1,tmp2;
tmp1=w[x+1]-f[k][x];
tmp2=w[x+1]+f[k][x];
if (tmp1==tmp2){
w[x]=tmp1;
if (w[x]>=0 && w[x]<=9) dfs(x-1,k,i);
}else{
w[x]=tmp1;
if (w[x]>=0 && w[x]<=9) dfs(x-1,k,i);
w[x]=tmp2;
if (w[x]>=0 && w[x]<=9) dfs(x-1,k,i);
}
}
}
int main()
{
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
scanf("%d%d",&a,&b);
int x=b;
n=0;
while (x>0){
x=x/10;
n++;
}
f[1][1]=7;
w[1]=7;
p=1;
o=p;
for (int i=1;i<n;i++){
p=o;
memset(s,0,sizeof(s));
for (int j=1;j<=i;j++)
w[j]=f[p][j];
for (int j=1;j<=9;j++){
for (int k=1;k<=p;k++){
w[i+1]=j;
dfs(i,k,i);
}
}
}
if (o>p) p=o;
for (int i=1;i<=p;i++){
for (int j=n;j>=1;j--){
s[i]=s[i]*10+f[i][j];
}
}
int sum=0;
for (int i=1;i<=p;i++)
if (s[i]>=a && s[i]<=b) sum++;
printf("%d",sum);
return 0;
}