比赛 [不是Rapiz出的]农场主钦定NOIP模拟赛1 评测结果 AAAAAAAAAA
题目名称 Rabbit Number 最终得分 100
用户昵称 半汪 运行时间 1.340 s
代码语言 C++ 内存使用 0.28 MiB
提交时间 2016-11-08 20:26:58
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int L,R;
typedef long long ll;
int Min(int x,int y){if(x<y)return x;return y;}
int Get_s(int tt){
	int t=0;
	while(tt){
		t++;
		tt/=10;
	}
	return t;
}
bool Judge(int len,int j,int k){
	int a1=0,tot1=0,tot2=0;ll a2;int t;
	for(int i=1;i<=len;i++){
		if(j&(1<<(i-1))){
			if(k&(1<<(i-1)))t=3;
			else t=2;
		}
		else if(k&(1<<(i-1)))t=1;
		     else t=0;
		a1=a1*10+t;tot1+=t;
		if(i==1&&t==0)return 0;
	}
	if(a1<L||a1>R)return 0;
	a2=a1*1ll*a1;
	while(a2){
		tot2+=a2%10;
		a2/=10;
	}
	if(tot1*tot1==tot2)return 1;
	return 0;
}
int main(){
	freopen("rabbits.in","r",stdin);
	freopen("rabbits.out","w",stdout);
	scanf("%d%d",&L,&R);
	int t1=Get_s(L),t2=Get_s(R);
	int cnt=0;
	for(int i=t1;i<=Min(t2,9);i++){
		int Full=(1<<i)-1;
		for(int j=0;j<=Full;j++){
			for(int k=0;k<=Full;k++){
				if(Judge(i,j,k))cnt++;
			}
		}
	}
	if(R==1e9)cnt++;
	printf("%d",cnt);
    return 0;
}