[agc011e]increasing numbers
题意:
如果一个十进制非负整数的所有数位从高位到低位是不减的,我们称它为“上升数”,例如1558,11,3,0都是上升数,而10,20170312则不是;
给定整数N,求最小的k使得N能被表示为k个上升数之和。
$1\leq N\leq 10^{500000}$
题解:
一个结论:每个上升数必定能被分解为九个全一数的和;
所谓“全一数”就是指1,1111,11111111这种每一位数都为1的数(包括0),证明显然。
设N可以被分解成K个全一数之和,显然答案$k=\lceil\frac{K}{9}\rceil$;
由于全一数不好处理,我们可以把一个长度为$l$的全一数变成$\frac{(10^{l+1}-1)}{9}$,那么有:
$N=\sum\limits_{i=1}^{K}\frac{(10^x)}{9}$(此处$x$代表不确定的位数)
$9N=\sum\limits_{i=1}^{K}(10^x-1)$
$9N+K=\sum\limits_{i=1}^{K}10^x$
这个式子是什么意思呢?如果不考虑进位,右边每一项都会使数位和+1,那么总体就说明$9N+K$的数位和等于$K$的数位和,此时$K$一定是9的倍数;
如果考虑进位,那么每进一位数位和就会减少9,因此$K$仍然要是9的倍数。
由于答案最多不会超过N的位数,枚举k,写个高精度乱做就行了。。。注意加法的时候没有进位就要break,这样是均摊$O(1)$的,否则是$O(n^2)$的。
代码:
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #include<queue> 7 #define inf 2147483647 8 #define eps 1e-9 9 using namespace std; 10 typedef long long ll; 11 int n,tot,a[800001]; 12 char s[500001]; 13 void mul(int a[],int &n,int k){ 14 int p=0; 15 tot=0; 16 for(int i=1;i<=n;i++){ 17 p=a[i]*k+p; 18 a[i]=p%10; 19 tot+=a[i]; 20 p/=10; 21 } 22 if(p)a[++n]=p; 23 tot+=p; 24 } 25 void add(int a[],int &n,int k){ 26 int p=0; 27 tot-=a[1]; 28 a[1]+=k; 29 p=a[1]/10; 30 a[1]%=10; 31 tot+=a[1]; 32 for(int i=2;i<=n;i++){ 33 tot-=a[i]; 34 a[i]+=p; 35 p=a[i]/10; 36 a[i]%=10; 37 tot+=a[i]; 38 if(!p)break; 39 } 40 if(p)a[++n]=p; 41 tot+=p; 42 } 43 int main(){ 44 scanf("%s",s); 45 n=strlen(s); 46 for(int i=1;i<=n;i++){ 47 a[i]=s[n-i]-'0'; 48 } 49 mul(a,n,9); 50 for(int i=1;i<=n;i++){ 51 add(a,n,9); 52 if(tot%9==0&&i*9>=tot)return printf("%d",i),0; 53 } 54 return 0; 55 }
转载于:https://www.cnblogs.com/dcdcbigbig/p/9724243.html
[agc011e]increasing numbers相关推荐
- AT2341 Increasing Numbers
传送门 还是猜结论呢 然后我们就想我们可以每次去掉尽量多的位数来保证次数最小,假装这是对的,先写一发,A了 考虑如何去掉尽量多的位数,我们可以找到最大的几位的不下降序列,把最后一个-1,后面全部改成9 ...
- 微生物预测年龄,皮肤比肠道更准确
58 文献速递 众所周知,人类肠道微生物群会随着年龄而变化,但是人体微生物群作为年龄的预测因子的相对价值以及在人群的预测稳健性尚不清楚.本研究用多个公共数据进行了随机森林回归,测试了口腔,肠道和皮肤( ...
- NBT-19年2月刊4篇35分文章聚焦宏基因组研究
新年4篇35分文章聚焦宏基因组研究 Nature Biotechnology (NBT,自然生物技术,IF 35.7)在2019年2月刊(https://www.nature.com/nbt/volu ...
- NBT-新年4篇35分文章聚焦宏基因组研究
文章目录 新年4篇35分文章聚焦宏基因组研究 1. 超高速细菌基因组检索技术 摘要 序列搜索方法 2. 宏基因组中设计全面可扩展探针捕获序列多样性 摘要 CATCH设计探针 3. 1520个人类肠道可 ...
- 每日英语:China's Youth to Employers: I Quit
For increasing numbers of young Chinese professionals, the first day back at work after the Lunar Ne ...
- 每日英语:Would We Be Healthier With A Vegan Diet?
A July 2012 Gallup poll puts the percentage of American adults who say they consider themselves vege ...
- CEF(包含均衡负载)
(转自: http://baike.baidu.com/view/51048.htm) 传统路由器的基本作用是路由计算和包转发,通常基于共享存储器体系结构,采和集中式CPU,即单个CPU(或多个CPU ...
- Paper:GPT-3《 Language Models are Few-Shot Learners》的翻译与解读
Paper:GPT-3< Language Models are Few-Shot Learners>的翻译与解读 目录 <GPT-3: Language Models are Fe ...
- performance and scalability
就某种算法而言: performance 性能,可能是某算法的预测(分类)精度.耗时等指标. scalability 可伸缩性,即规模可调整. 应用程序应对负载改变的能力,比如,一个系统在服务器于10 ...
最新文章
- 深度学习模型压缩与加速综述!
- windows主机资源Snmp OIDs CPU, Memory, Disk等
- 关于vue+element-ui项目的分页,返回默认显示第一页的问题解决
- linux服务器密码策略,windows与linux服务器平台密码策略管理
- 基于OHCI的USB主机 —— 寄存器(其它)
- python threading lock_python threading之死锁和可重入锁
- Git学习笔记:分支管理(1)
- 一键导出/备份「有道云笔记」工具
- 装饰器模式和代理模式的区别
- AOP(基于注解对AspectJ操作)
- 硬件基础知识---(3)电阻2
- Linux配置JAVA环境变量(图文教程)
- Restore IP Address-深度优先遍历DFS
- h5前期js知识点10月16日总结
- c语言程序设计计划书示例,C语言学习计划书
- html实现圆形图片
- Verilog学习笔记(7)Modelsim仿真_三角波发生器
- iOS深拷贝和浅拷贝
- 移动端cpu天梯图2020_笔记本CPU排行天梯图2020
- 安装memcached.exe时, msvcr71.dll丢失怎么解决
热门文章
- oracle的sid
- poj3159差分约束+栈实现的spfa+邻接链表
- QTP自动例子的源码分析--ClearMainWindow
- C++11新特性(4)
- Tensorflow object detection API训练自己的目标检测模型 详细配置教程 (一)
- C# 学生信息管理系统 2.0
- php读取pdf文件乱码_PHP 读取PDF文件内容之PdfParser
- Python计算斐波那契数列
- python标准化_数据标准化与Python实现
- 课节5:图神经网络算法(二):GraphSage实践