题面

传送门

思路

首先,我们观察一下上升数的性质

可以发现,它一定可以表示为最多9个全是1的数字的和

那么我们设$N$可以被表示成$k$个上升数的和,同时我们设$p_i=\underbrace{111\cdots 11}_{i}$

我们令$a_{i,j}$表示构成$N$的第$I$个上升数的第$j$个全1数的位数

那么可以写出这样的式子

$N=\sum_{i=1}k\sum_{j=1}9 p_{a[i][j]}$

我们发现,$p_{i,j}$这样子摆在这里非常不好操作,那么我们继续观察$p_i$的性质,发现:

$p_i=\frac{10^i - 1}{9}$

所以上式可以写成:

$N=\sum_{i=1}k\sum_{j=1}9 \frac{10^{a[i][j]}-1}{9}$

我们把9乘过去,再把右边的$9k$个1加过去,得到:

$9N+9k=\sum_{i=1}k\sum_{j=1}910^{a[i][j]}$

我们发现:右边这个东西,如果在所有的10的幂加起来的过程中,能够不进位的话,那么它的数位和一定是9k

如果它发生了进位,因为1次进位一定是-10+1,总数位和-9,而9k是9的倍数,所以这个东西的数位和一定是一个小于9k的9的倍数

再看左边,我们发现,实际上我们需要满足的就是$9N+9k$的数位和小于9k且是9的倍数,而$9N+9k$一定是9的倍数

所以我们只需要求出最小的$k$,使得$9N+9k$的数位和小于等于$9k$即可

由数学归纳法不难证明,本题中$k\leq len(N)$,所以我们只需要枚举$k=1\cdots 5e5$,只要维护一个高精度+即可,复杂度是担此操作均摊$O(1)$,总复杂度$O(n)$

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1000010];int a[1000010];
int main(){
scanf("%s",s);int n=strlen(s),i,j,sum=0,k;
for(i=1;i<=n;i++) a[i]=(s[n-i]-'0')*9;
for(i=1;i<=n;i++){
a[i+1]+=a[i]/10;a[i]%=10;
}
if(a[n+1]) n++;
for(i=1;i<=n;i++) sum+=a[i];
for(k=1;k<=n*10;k++){
a[1]+=9;sum+=9;
j=1;
while(j<=n){
if(a[j]<10) break;
sum-=10;a[j]-=10;
sum++;a[j+1]++;
j++;
if(j==n&&a[j+1]) n++;//别忘了有可能加一位
}
if(sum<=9*k){//注意这里一定不要写成等于了
printf("%d\n",k);return 0;
}
}
}

[AGC011E] Increasing Numbers [数学]的更多相关文章

  1. [agc011e]increasing numbers

    题意: 如果一个十进制非负整数的所有数位从高位到低位是不减的,我们称它为“上升数”,例如1558,11,3,0都是上升数,而10,20170312则不是: 给定整数N,求最小的k使得N能被表示为k个上 ...

  2. AGC011-E Increasing Numbers

    题意 给定一个数\(n\),\(n≤10^{500,000}\),问\(n\)最少可以拆分成几个不降数的和.一个不降数是在十进制位下,从高位往低位看,每个数都不会比高位的数更小的数 做法 不降数可以拆 ...

  3. UVA 11582 Colossal Fibonacci Numbers(数学)

    Colossal Fibonacci Numbers 想先说下最近的状态吧,已经考完试了,这个暑假也应该是最后刷题的暑假了,打完今年acm就应该会退了,但是还什么都不会呢? +_+ 所以这个暑假,一定 ...

  4. POJ 3252 Round Numbers 数学题解

    Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...

  5. HDU 6659 Acesrc and Good Numbers (数学 思维)

    2019 杭电多校 8 1003 题目链接:HDU 6659 比赛链接:2019 Multi-University Training Contest 8 Problem Description Ace ...

  6. UVA 11481 - Arrange the Numbers 数学

    Consider this sequence {1, 2, 3, . . . , N}, as a initial sequence of first N natural numbers. You ca ...

  7. POJ2402/UVA 12050 Palindrome Numbers 数学思维

    A palindrome is a word, number, or phrase that reads the same forwards as backwards. For example,the ...

  8. CF385C Bear and Prime Numbers 数学

    题意翻译 给你一串数列a.对于一个质数p,定义函数f(p)=a数列中能被p整除的数的个数.给出m组询问l,r,询问[l,r]区间内所有素数p的f(p)之和. 题目描述 Recently, the be ...

  9. SGU 169 numbers 数学

    169.Numbers Let us call P(n) - the product of all digits of number n (in decimal notation). For exam ...

随机推荐

  1. singnal 13 was raised

    在app运行过程中按下home键或者其他原因app被挂起,socket连接不会断开,服务器为了节省资源,在一段时间后会主动关闭这个连接.当玩家再次切回到游戏后,前端并不知道这个连接已经断开了,继续通过 ...

  2. Status bar - iOS之状态栏

    (一)设置状态栏显示和隐藏 1.通过 Info.plist 文件增加字段,控制状态栏全局显示和隐藏 在 Info.plist 文件中增加字段 Status bar is initially hidde ...

  3. jQuery、Angluar、Avalon对比

    最近在慕课网看一些关于avalon的视频,记录下一些笔记及代码实例以便日后自己复习可以用到,另外也可以给不想花时间看视频的小伙伴提供一丝丝帮助 这里主要是做一个简单的todolist 分别用三种不同的 ...

  4. Linux添加swap分区

    swap分区的作用为当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用,那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到S ...

  5. input属性总结

    <input type="text" readonly="readonly" /> 这个是不能输入的 readonly="readonly ...

  6. 易语言制作的QQ聊天中常用的GIF图片【带源码下载】

    该软件调用网页实现表情包制作,使用了精益模块. 最近比较火的王境泽.张学友.切格瓦拉.为所欲为.今天星期五.黑人问号脸.偷电瓶车.诸葛孔明.金坷垃等都可以通过此软件在线制作属于你的表情包. 太困了懒得 ...

  7. C语言基础篇(一)关键字

    导航: 1. 数据类型 !!! 2. 自定义类型 !!!! 3. 逻辑结构 4. 类型修饰符 !! 5. 杂项 !! ----->x<------------->x<----- ...

  8. [CodeChef]RIN(最小割)

    Description  有m门课可以在n个学期内学习,第i门课在第j个学期的收益是\(X_{i,j}\),一个学期可以学多门课,有的课之间有依赖关系,即必须先学a再学b,求最大收益.n,m<= ...

  9. 使wlr写cnblog的博客-2 设置cnblog帐号

    ref:http://www.cnblogs.com/liuxianan/archive/2013/04/13/3018732.html   使用: 打开Windows Live Writer,第一次 ...

  10. PHP.15-mysqli

    从PHP5.0开始可以使用mysql(i), 是一个面向对象的技术(新加功能都会以对象形式添加) i:表示改进,1. 功能增加了, 2,效率大大增加(以后的PHP项目改成mysqli),3,更稳定 m ...