比赛 |
[不是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;
}