记录编号 44413 评测结果 AAAAAAAAAA
题目名称 [顾研NOIP] 幸运之数 最终得分 100
用户昵称 Gravatarfeng 是否通过 通过
代码语言 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;
}