P1362 兔子数

题目描述

设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4。如果一个正整数满足 S(x*x) = S(x) *S(x),我们称之为 Rabbit N umber。比方说,22 就是一个 Rabbit N umber,因为 S(484) = S(22) *S(22)。

现在,给出一个区间 [L, R],求在该区间内的 Rabbit N umber 的个数。

输入输出格式

输入格式:

输入仅一行,为空格隔开的两个数 L 和 R。

输出格式:

输出仅一行一个整数,表示所求 Rabbit N umber 的个数。

输入输出样例

输入样例#1:

样例1:22 22

样例2:484 484

样例3:1 58

样例4:58 484

样例5:1000000000 1000000000
输出样例#1:

样例1:1

样例2:0

样例3:12

样例4:24

样例5:1

说明

1 <= L <= R <= 10^9

思路:

  1.首先看数据范围(1 <= L <= R <= 10^9),这说明最大的数S(a*a)一定会比18*9(162)要小(因为S是加和嘛~),所以S(a)就一定会比13要小,因为13*13=169(稍微>162),所以不可能会比13要大.

  2.因为经过大量实(打)验(表)之后得出每一个兔子数的每一位上的数一定会<=3,因为如果某数字x的一位a>=4.那么它在该位的贡献是a^2的 但是在 x 中这一位自乘进了一位 故贡献为 a^2/10+a^2%10

  3.那么这道题的思路就很明了了:

            搜索+剪枝就好.

坑点:

  要记得排次序,不能够直接输出cnt!!!

上代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define LL long long
using namespace std; int L,R,cnt,ANSWER;
int ans[]; void build(int x,int y,int z)
{
LL a=x;
a=a*a;
int b=;
if(x>=L && x<=R)///在区间之内
{
while(a)
{
b+=a%;
a/=;
}
if(y*y==b)///寻找满足条件的数,并进行储存
ans[++cnt]=x;
}
///停止的条件
if(z>R) return;
for(int i=;i<;i++)
build(x*+i,y+i,z*);
} int main()
{
scanf("%d%d",&L,&R);
build(,,);
/*
for(int i=1;i<=cnt;i++)
printf("%d ",ans[i]);
printf("\n");
printf("--------------------------\n");
*/
sort(ans+,ans++cnt);
/*
for(int i=1;i<=cnt;i++)
printf("%d ",ans[i]);
printf("\n");
*/
for(int i=;i<=cnt;i++)
{
if(ans[i-]!=ans[i])
ANSWER++;
}
printf("%d",ANSWER);
return ;
}

luogu P1362 兔子数 x的更多相关文章

  1. 洛谷 P1362 兔子数

    题目描述 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4.如果一个正整数满足 S(x*x) = S(x) *S(x),我们称之为 ...

  2. BZOJ2432 [Noi2011]兔农

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. 2432: [Noi2011]兔农 - BZOJ

    Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这对兔子从第三个月 ...

  4. BZOJ 2432 兔农

    Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这对兔子从第三个月 ...

  5. 【bzoj2432】【NOI2011】兔农

    题目描述 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小 朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这 对兔子从第三个月开始,每个 ...

  6. [BZOJ2432][Noi2011]兔农 矩阵乘法+exgcd

    2432: [Noi2011]兔农 Time Limit: 10 Sec  Memory Limit: 256 MB Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到 ...

  7. java例题_01 不死神兔!

    1 /*1 [程序 1 不死神兔] 2 题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 3 程 ...

  8. BZOJ 1001: [BeiJing2006]狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 20029  Solved: 4957[Submit][ ...

  9. bzoj 1001狼抓兔子(对偶图+最短路)最大流

    推荐文章:<浅析最大最小定理在信息学竞赛中的应用>--周冬 题目 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还 ...

随机推荐

  1. python判断一个数是不是完全平方数

    思路: 完全平方数开根号后是一个整数,非完全平方数开根号的话是一个非整数 开根号后取整,如果开根号后是整数的话就不会改变值的大小 取整后再平方,如果值和之前一样,说明是完全平方数 import mat ...

  2. 2018.08.15【2018提高组】模拟A组 比赛总结

    总结 T1 这题我一看,哇!好简单啊! 直接建立每一个字母的映射就可以了. 我很快就打完了程序,跳到下一题. 等到比赛快结束时,我才发现了一个可怕的数据: 1 abcdefghijklmnopqrst ...

  3. Codeforces 1194C. From S To T

    传送门 首先贪心, $S$ 能和 $T$ 匹配就要尽量匹配,剩下的才让 $P$ 来补 在 $S$ 全部匹配上的情况下,看看 $P$ 是否有足够的字符即可 #include<iostream> ...

  4. Git 一般性操作

    git全局设定 git config --global user.name “码云账号” git config --global user.email “码云注册邮箱” git 定位文件夹cd进入到需 ...

  5. vs nuget找不到包

    nuget.org https://api.nuget.org/v3/index.json

  6. css折叠表格

    1.html <div class="custom-fold-table"> <table cellpadding="0" cellspaci ...

  7. 转载: Ubuntu 在命令下,安装中文环境的方法。

    转载: https://blog.csdn.net/zhangchao19890805/article/details/52743380 安装英文版ubuntu,在打开含有中文字符文件时会乱码,有需要 ...

  8. 惟一ID生成方法

    几乎所有的业务系统,都存在生成惟一ID的需求,例如: 用户ID:user_id 订单ID: order_id 消息ID: msg_id 常见的ID生成有三大类方法: 一.中间件实现 1.利用Mysql ...

  9. 【Groovy】 Groovy笔记

    一.简单了解Groovy Groovy简介: Groovy是基于JVM的敏捷开发语言,语法与Java类似,但更加简洁,容错性也比Java强,同时Java能非常好的契合(例如Groovy能够使用Java ...

  10. Eclipse集成spring-tool-suite(STS)

    1.官方下载 sts是spring官方在eclipse基础上加了很多插件之后封装的开发工具.sts与eclipse完全一样,但是多了很多插件,比如maven,使用起来更加方便.如果使用eclipse自 ...