比赛 |
[不是Rapiz出的]农场主钦定NOIP模拟赛1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Rabbit Number |
最终得分 |
100 |
用户昵称 |
Hzoi_chairman |
运行时间 |
1.804 s |
代码语言 |
C++ |
内存使用 |
0.26 MiB |
提交时间 |
2016-11-08 19:24:19 |
显示代码纯文本
/*
Name:Rabbit Number
Copyright:
Author:chairman
Date: 08/11/16 19:16
Description:打表观察规律可知,答案都是有周期的,每一次都是从已有的乘10+1、2、3,递归就行了
还有一种做法:先打表,二分查找即可
*/
#include<cstdlib>
#include<cstdio>
#define ll long long
ll read()
{
ll x,f=1;
char ch;
while(ch=getchar(),ch>'9'||ch<'0')if(ch=='-')f=-1;
x=ch-48;
while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;
return x*f;
}
ll l,r,ans;
ll count(ll x)
{
int cnt=0;
while(x)cnt+=x%10,x/=10;
return cnt;
}
void dfs(ll x)
{
for(int i=0;i<=3;i++)
{
ll y=x*10+i;ll z=count(y);
if(!y)continue;
if(z*z==count(y*y)&&y>=l&&y<=r)ans++;
if(y*10<=r)dfs(y);
}
}
int main()
{
freopen("rabbits.in","r",stdin);
freopen("rabbits.out","w",stdout);
l=read(),r=read();
dfs(0);
printf("%d\n",ans);
// system("pause");
fclose(stdin);
fclose(stdout);
}