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 题目大意: 给一串数 ...
随机推荐
- Java运行时环境---ClassLoader类加载机制
背景:听说ClassLoader类加载机制是进入BAT的必经之路. ClassLoader总述: 普通的Java开发其实用到ClassLoader的地方并不多,但是理解透彻ClassLoader类的加 ...
- Python二级-----------程序冲刺2
1. 编写 Python 程序输出一个具有如下风格效果的文本,用作文本进度条样式,部分代码如下,填写空格处. ...
- vue-router 页面布局
在单页面应用程序(SPA)中,有些页面的布局结构是上下两块是固定,中间内容是变化的.这时在入口处固定上下部分就可以很好的解决这一问题.有少部分页面没有上下部分或不需要(如:用户注册.登陆页面),针对这 ...
- Python笔记-IO编程
IO在计算机中是指input和output(数据输入与输出),涉及到数据交换(磁盘.网络)的地方就需要IO接口. 输入流input stream是指数据从外面(磁盘.网络服务器)流入内存:输出流out ...
- OpenCV尝试
我们来尝试,使用OpenCV来读入本地的一张图片,并使用库函数将其水平翻转.垂直翻转以及边缘提取,后将结果文件存入本地. 工具:VS2017 OpenCV4.0.1 怎么配置opencv/报错怎么办 ...
- 扫码下单支持同桌单人点餐FAQ
一.使用场景 满足较多商户希望同一桌台,各自点各自的菜品的业态场景(例如杭味面馆,黄焖鸡米饭店,面馆等大多数轻快餐店) 二.配置步骤及注意事项 管理员后台配置--配置管理--店铺配置--扫码点餐tab ...
- python使用rabbitMQ介绍三(发布订阅模式)
一.模式介绍 在前面的例子中,消息直接发送到queue中. 现在介绍的模式,消息发送到exchange中,消费者把队列绑定到exchange上. 发布-订阅模式是把消息广播到每个消费者,每个消费者接收 ...
- FelxCell常用属性设置(未完待续......)
this.grid1.AllowUserPaste//返回或设置是否允许用户粘贴文字和格式 grid1.Cell(Rows, 1).WrapText = true;//设置单元格自动换行
- SqlServer 操作 JSON
SqlServer 操作 JSON Intro Sql Server 从 2016 开始支持了一些 json 操作,最近的项目里也是好多地方直接用字段直接存成了 json ,需要了解一下怎么在 Sql ...
- maven编译开源项目报enforce错解决
刚下载一个开源项目源码,用maven编译发现报错: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plu ...