记录编号 |
44351 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[顾研NOIP] 幸运之数 |
最终得分 |
100 |
用户昵称 |
Czb。 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.622 s |
提交时间 |
2012-10-18 11:37:29 |
内存使用 |
0.30 MiB |
显示代码纯文本
#include<stdio.h>
#include<queue>
using namespace std;
typedef long long Int;
Int x,y,ans;
int t,a[20],b[20];
queue <Int> Q;
void dfs(int k)
{
if(k==0)
{
Int tmp=0,top=b[t+1];
for(int i=t+1;i>0;i--)
{
tmp*=10;
top*=10;
tmp+=b[i];
}
for(Int i=tmp;i<=y;i+=top,top*=10)
{
Q.push(i);
}
return;
}
if(b[k+1]-a[k]>=0)
{
b[k]=b[k+1]-a[k];
dfs(k-1);
}
if(b[k+1]+a[k]<10&&a[k]!=0)
{
b[k]=b[k+1]+a[k];
dfs(k-1);
}
}
void solve(Int k)
{
if(k>=x&&k<=y)
ans++;
t=0;
while(k)
{
a[++t]=k%10;
k/=10;
}
for(int i=1;i<10;i++)
{
b[t+1]=i;
dfs(t);
}
}
void bfs()
{
Q.push(7);
while(!Q.empty())
{
solve(Q.front());
Q.pop();
}
}
int main()
{
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
scanf("%lld%lld",&x,&y);
bfs();
printf("%lld\n",ans);
return 0;
}