比赛 [不是Rapiz出的]农场主钦定NOIP模拟赛1 评测结果 AAAAAAAAAA
题目名称 Rabbit Number 最终得分 100
用户昵称 森林 运行时间 0.760 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2016-11-08 21:36:18
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<cstring>
#include<set>
using namespace std;
set<long long>s;
long long tmp;
int a[20]={0},now=0,beg,end,ans=0;
inline int get(long long a){
	int tot=0;
	while(a){
		tot+=a%10;
		a/=10;
	}
	return tot;
}
inline long long tosum(const int &sum){
	long long ans=0;
	for(int i=1;i<=sum;++i)ans=ans*10+a[i];
	return ans;
}int l,r;
inline bool check(int d,int sum){
	for(int i=1;i<=sum;++i)if(a[i]*d>=5)return 0;
	return 1;
}
inline void solve(const int &sum){
//	cout<<sum<<endl;
	if(sum>end)return;
	if(sum>=beg){
//		puts("VDHBKLW");
		tmp=tosum(sum);
		if(tmp>=l&&tmp<=r){
			if(get(tmp)*get(tmp)==get(tmp*tmp)){
				if(!s.count(tmp)){
					++ans;
					s.insert(tmp);
				}
			}
		}
	}
	for(int i=0;i<4;++i){
		if(check(i,sum)){
			a[sum+1]=i;
			solve(sum+1);
		}
	}
}
int main(){
	#define submit
	#ifdef submit
	freopen("rabbits.in","r",stdin);
	freopen("rabbits.out","w",stdout);
	#endif
	
	scanf("%d%d",&l,&r);
	beg=(int)log10(l*1.0);
	end=(int)log10(r*1.0)+2;
	solve(0);
	printf("%d\n",ans);
	#ifdef submit
	fclose(stdin);
	fclose(stdout);
	#else
	system("pause");
	#endif
	return 0;
}