CF1157A-Reachable Numbers题解
题目大意:有一个函数\(f(x)\),效果是将\(x+1\)后,去掉末尾所有的\(0\),例如:
\(f(599)=6\),因为\(599+1=600→60→6\)
\(f(7)=8\),因为\(7+1=8\)
\(f(9)=1\),因为\(9+1=10→1\)
\(f(10099)=101\),因为\(10099+1=10100→1010→101\)
我们可以多次进行函数\(f(x)\)的运算,从而让一个数\(x\)转换为另一个数,例如\(10098\)可以转换为\(102\),因为\(f(f(f(10098)))=f(f(10099))=f(101)=102\)。
你需要做的是给你一个数\(n\),求出\(n\)经过多次函数\(f(x)\)的计算,能转换为几个不同的数(包括自身)?
首先,通过模拟样例,不难得出一个结论:如果\(f(x)\)的结果先前已经得到,那么就代表着所有的答案已经算完。
例如:\(n=1\)时,答案为\(9\),模拟过程如下:
\(f(1)=2\)
\(f(2)=3\)
\(f(3)=4\)
\(f(4)=5\)
\(f(5)=6\)
\(f(6)=7\)
\(f(7)=8\)
\(f(8)=9\)
\(f(9)=1\)
\(f(1)=2\)
\(...\)
不难发现,当我们算到\(f(9)=1\)时,便可以结束计算,因为很显然接着算都是得到之前算过的数,于是我们的代码也就很容易写了。
伪代码:
bool book[];//桶,用于判断某个数是否已经算过
int f(int n)//f函数
{
n++;
while(!(n%10))
n/=10;
return n;
}
int main()
{
for(;!book[n];n=f(n))//核心代码
{
book[n]=true;
ans++;
}
}
但是,以上的代码有一个严重的错误:book数组是要开到n级别的,而\(n \le 10^9\),很显然开这么大会MLE,于是我们的\(STL::map\)就派上用场啦!
用\(STL::map\)来代替桶,这样就可以防止空间爆炸了。
代码如下:
#pragma GCC diagnostic error "-std=c++11"
#include <cstdio>
#include <map>
using namespace std;
template<class T>void r(T &a)//快读
{
T s=0,w=1;a=0;char ch=getc(stdin);
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getc(stdin);}
while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getc(stdin);}
a=w*s;
}
template<class T,class... Y>void r(T& t,Y&... a){r(t);r(a...);}
int f(int n)
{
n++;
while(!(n%10))
n/=10;
return n;
}
map<int,bool>book;
int main()
{
int n,ans=0;
r(n);
for(;!book[n];n=f(n))
{
book[n]=true;
ans++;
}
printf("%d",ans);
return 0;
}
CF1157A-Reachable Numbers题解的更多相关文章
- Codeforces1157A(A题)Reachable Numbers
A. Reachable Numbers Let's denote a function f(x)f(x) in such a way: we add 11 to xx, then, while th ...
- CF55D Beautiful numbers 题解
题目 Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer n ...
- Hdoj 1905.Pseudoprime numbers 题解
Problem Description Fermat's theorem states that for any prime number p and for any integer a > 1 ...
- Hdoj 1058.Humble Numbers 题解
Problem Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The ...
- [LeetCode] Add Two Numbers题解
Add Two Numbers: You are given two non-empty linked lists representing two non-negative integers. Th ...
- poj 1995 Raising Modulo Numbers 题解
Raising Modulo Numbers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6347 Accepted: ...
- CF1320 Div1 D.Reachable Strings 题解
题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...
- CF1265B Beautiful Numbers 题解
Content 给定一个 \(1\sim n\) 的排列,请求出对于 \(1\leqslant m\leqslant n\),是否存在一个区间满足这个区间是一个 \(1\sim m\) 的排列. 数据 ...
- CF359D:Pair of Numbers——题解
https://vjudge.net/problem/CodeForces-359D http://codeforces.com/problemset/problem/359/D 题目大意: 给一串数 ...
随机推荐
- dubbo-源码分析Provider
Dubbo provider启动原理: 当我们的dubbo启动我们的spring容器时spring 初始化容器的时候会查找META-INF/spring.handles文件查找对应的Namespace ...
- JavaScript局部变量变量和函数命名提升
之前接触了一些javascript局部变量命名提升的问题但是一直没有总结今天特地好好总结一下 变量提升 一个变量的作用域是程序源代码中定义的这个变量的区域.全局变量拥有全局作用域,在javascrip ...
- js 百度地图定位
//百度 layer.msg('正在定位,请稍后'); var geolocation = new BMap.Geolocation({ enableHighAccuracy: true, //是否使 ...
- Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码
Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...
- qt生成二维码
到官网下载qrencode http://fukuchi.org/works/qrencode/index.html.en qrenc.c不用,这个是测试用的,把config.h.in文件改为conf ...
- UDK Stat命令
Stat命令(chs en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据. 非Shipping版的UDK才会启用STATS宏,统计逻辑才会编译进exe,才能使 ...
- go语言框架gin之集成swagger
1.安装swag 在goLand中直接使用go get -u github.com/swaggo/swag/cmd/swag命令安装会报错 翻了很多博客,都没找到太合适的办法,根据博客中所写的操作还是 ...
- Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g)
Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g) 1.Oracle下载(Oracle11g) oracle下载方法,请根据以下步 ...
- MySQL随笔(1)
mysql是一种关系型数据库,和SQL ,oracle一样是较为常用的关系型数据库,属于oracle旗下的产品,在web应用方面,MySQL是最好的RDBMS(relational database ...
- 【原】无脑操作:HTML5 + CSS + JavaScript实现比赛排程
1.背景:朋友请帮忙做一个比赛排程软件 2.需求: ① 比赛人数未知,可以通过文本文件读取参赛人员名称: ② 对参赛人员随机分组,一组两人,两两PK,如果是奇数人数,某一个参赛人员成为幸运儿自动晋级: ...