记录编号 44406 评测结果 AAAAAAAAAA
题目名称 1174.[顾研NOIP] 幸运之数 最终得分 100
用户昵称 Truth.Cirno 是否通过 通过
代码语言 C++ 运行时间 2.027 s
提交时间 2012-10-18 18:14:32 内存使用 3.15 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <memory.h>
#include <map>
using namespace std;

map<int,bool> ok[2];
map<int,bool>::iterator iter,itere;
int num[11],nnum[11];
bool use;

void combine(int n)
{
	int i,now=0;
	for (i=n;i>=0;i--)
		now=now*10+nnum[i];
	if (now>=int(pow(10,double(n))))
		ok[!use][now]=true;
}

void dfs(int now,int deep,int maxdeep)
{
	nnum[deep]=now;
	if (deep==maxdeep)
	{
		combine(maxdeep);
		return;
	}
	int temp;
	if (num[deep])
	{
		temp=now+num[deep];
		if (temp<=9)
			dfs(temp,deep+1,maxdeep);
		temp=now-num[deep];
		if (temp>=0)
			dfs(temp,deep+1,maxdeep);
	}
	else
		dfs(now,deep+1,maxdeep);	
}

int main(void)
{
	freopen("lucky.in","r",stdin);
	freopen("lucky.out","w",stdout);
	int i,j,a,b,len,temp,total=0;
	cin>>a>>b;
	ok[use][7]=true;
	for (i=1;i<=8;i++)
	{
		ok[!use]=ok[use];
		itere=ok[use].end();
		for (iter=ok[use].begin();iter!=itere;iter++)
		{
			temp=(*iter).first;
			memset(num,0,sizeof(num));
			len=0;
			while (temp)
			{
				num[len++]=temp%10;
				temp/=10;
			}
			for (j=0;j<=9;j++)
				dfs(j,0,i);
		}
		use=!use;
	}
	itere=ok[use].end();
	for (iter=ok[use].begin();iter!=itere;iter++)
	{
		temp=(*iter).first;
		if (temp<a)
			continue;
		if (temp>b)
			break;
		total++;
	}
	cout<<total<<endl;
	return(0);
}