[agc011e]increasing numbers
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[agc011e]increasing numbers相关的知识,希望对你有一定的参考价值。
?????????mit clu ?????? strlen ?????? ace include pre color
?????????
????????????????????????????????????????????????????????????????????????????????????????????????“?????????”?????????1558,11,3,0?????????????????????10,20170312????????????
????????????N???????????????k??????N???????????????k?????????????????????
$1leq Nleq 10^{500000}$
?????????
???????????????????????????????????????????????????????????????????????????
??????“?????????”?????????1,1111,11111111????????????????????????1???????????????0?????????????????????
???N??????????????????K?????????????????????????????????$k=lceilfrac{K}{9} ceil$???
????????????????????????????????????????????????????????????$l$??????????????????$frac{(10^{l+1}-1)}{9}$???????????????
$N=sumlimits_{i=1}^{K}frac{(10^x)}{9}$?????????$x$???????????????????????????
$9N=sumlimits_{i=1}^{K}(10^x-1)$
$9N+K=sumlimits_{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 }
以上是关于[agc011e]increasing numbers的主要内容,如果未能解决你的问题,请参考以下文章