首页 技术 正文
技术 2022年11月15日
0 收藏 592 点赞 3,561 浏览 1254 个字

题意:

如果一个十进制非负整数的所有数位从高位到低位是不减的,我们称它为“上升数”,例如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)$的。

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
using namespace std;
typedef long long ll;
int n,tot,a[];
char s[];
void mul(int a[],int &n,int k){
int p=;
tot=;
for(int i=;i<=n;i++){
p=a[i]*k+p;
a[i]=p%;
tot+=a[i];
p/=;
}
if(p)a[++n]=p;
tot+=p;
}
void add(int a[],int &n,int k){
int p=;
tot-=a[];
a[]+=k;
p=a[]/;
a[]%=;
tot+=a[];
for(int i=;i<=n;i++){
tot-=a[i];
a[i]+=p;
p=a[i]/;
a[i]%=;
tot+=a[i];
if(!p)break;
}
if(p)a[++n]=p;
tot+=p;
}
int main(){
scanf("%s",s);
n=strlen(s);
for(int i=;i<=n;i++){
a[i]=s[n-i]-'';
}
mul(a,n,);
for(int i=;i<=n;i++){
add(a,n,);
if(tot%==&&i*>=tot)return printf("%d",i),;
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,026
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,517
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,364
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,145
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,779
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,856