Description

传送门

Solution

依题得所有不下降数(设为a)可以拆为若干个全1数的和(如:1558=1111+111+111+111+111+1+1+1)

并且任意a所能拆出的全一数的个数<=9。则我们设定a拆出9个全1数,其中允许有0的存在。(以下的a[i]可以为所有自然数)

(任一全1数可以表示为$\frac{(10^{c}-1)}{9}$)

则$n=\sum _{i=1}^{9k}\frac{(10^{a[i]}-1)}{9}$

$9n=\sum _{i=1}^{9k}(10^{a[i]}-1)$

$9n+9k=\sum _{i=1}^{9k}10^{a[i]}$

由此可得,9n+9k这个数的每一位的和要<=9k。

我们要求最优的k。则针对数n,每次减掉一个不下降数,位数就会少1。

证明:假如在最优解中,要减x(x>1)个"不下降数"n的位数才会少1,这x个“不下降数”可以直接合并为1个“不下降数”,所以该解不是最优的,矛盾。

所以我们的k只要从1到n的位数枚举就可以了。进位的话直接暴力。(反正也进不了多少位)

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
char s[];int n,num[],c,k;
int pls(int &k)
{
int re=;
for (int i=;i<=k;i++)
{
if (num[i]<) break;
re++;
num[i+]+=num[i]/;num[i]%=;
}
if (num[k+]) k++;
return re;
}
int _n;
int main()
{
scanf("%s",s+);n=_n=strlen(s+);
for (int i=;i<=n;i++) num[i]=s[n-i+]-'',num[i]*=;
for (int i=;i<=_n;i++)
{num[i+]+=num[i]/;num[i]%=;c+=num[i];}
if (num[_n+]) _n++,c+=num[_n];
for (int i=;i<=n;i++)
{
k++;
num[]+=;c+=;c-=*pls(_n);
if (c<=*k)
{
printf("%d",k);return ;
}
}
}

[agc011E]Increasing Numbers-[思考题]的更多相关文章

  1. [AGC011E] Increasing Numbers [数学]

    题面 传送门 思路 首先,我们观察一下上升数的性质 可以发现,它一定可以表示为最多9个全是1的数字的和 那么我们设$N$可以被表示成$k$个上升数的和,同时我们设$p_i=\underbrace{11 ...

  2. [agc011e]increasing numbers

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

  3. AGC011-E Increasing Numbers

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

  4. 【AtCoder】AGC011 E - Increasing Numbers

    题解 题是真的好,我是真的不会做 智商本还是要多开啊QwQ 我们发现一个非下降的数字一定可以用不超过九个1111111111...1111表示 那么我们可以得到这样的一个式子,假如我们用了k个数,那么 ...

  5. AT2341 Increasing Numbers

    传送门 还是猜结论呢 然后我们就想我们可以每次去掉尽量多的位数来保证次数最小,假装这是对的,先写一发,A了 考虑如何去掉尽量多的位数,我们可以找到最大的几位的不下降序列,把最后一个-1,后面全部改成9 ...

  6. AtCoder Grand Contest 011 E - Increasing Numbers(灵性乱搞)

    题意: 当一个整数高位数字总不小于低位数字,或者说写成字符串之后单调不下降,称之为上升数.求一个整数最少能表示为多少个上升数的和.(n<=1e500000) 分析: 考虑那些不下降的数字,一定可 ...

  7. NOIp2018模拟赛四十

    今天太晚了...题解到时候补吧(flag立好) 成绩:100+0+0=100 感觉A题本质暴力贪心?C题一道水题我居然没做...亏爆 A:[agc011e]increasing numbers B:[ ...

  8. POJ 1239 Increasing Sequences 动态规划

    题目链接: http://poj.org/problem?id=1239 Increasing Sequences Time Limit: 1000MSMemory Limit: 10000K 问题描 ...

  9. TZOJ 5963 Increasing Sequences(线性DP)

    描述 Given a string of digits, insert commas to create a sequence of strictly increasing numbers so as ...

随机推荐

  1. 从AggregateException看异常类的设计

    异常是程序在有bug时最直观的表现形式,不担心有bug存在,而担心bug埋没在大堆的代码中而发现不了. 这篇随笔简单谈谈从AggregateException类源码(http://www.projky ...

  2. apache软件no_ssl和openssl两种类型的区别

    apache软件同一版本有两种类型:no_ssl和openssl: openssl多了个ssl安全认证模式,它的协议是HTTPS而不是HTTP,这就是带有SSL的服务器与一般网页服务器的区别了. 一般 ...

  3. 用C#自定义一个简单的集合

    闲来无聊来自己做了一个简单的'集合',用来加深自己对集合的理解 class listNode { private object value; public listNode(object _value ...

  4. Tomcat 安全设置 及 内存修改

    1.删除%tomcatRoot%/webapps目录下的examples.docs文件夹 2.修改%tomcatRoot%/conf/tomcat-users.xml <?xml version ...

  5. 使用jqGrid过程中出现的问题

    在使用jqGrid过程中,需要后台查询数据添加到表格中,在js中循环调用addRowData方法时出现浏览器崩溃现象. 原因:jqGrid的addRowData方法中做了一系列的处理,在后台返回数据量 ...

  6. 用tableView实现的一种加载数据的布局

    用tableView实现的一种加载数据的布局 此博文是应朋友之邀解决他的业务逻辑问题 效果: 素材: 源码: ImageCell.h 与 ImageCell.m // // ImageCell.h / ...

  7. [翻译] InstagramPhotoPicker

    InstagramPhotoPicker Present Image Picker like Instagram. 展示图片选择器,像Instagram这款应用一样. Installation - 安 ...

  8. linux rz上传文件及出错解决方案

    在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...

  9. CentOS针对磁盘IO[jdb2进程]的优化

    CentOS的jdb2进程总是沾满io,查了一些资料后才知道,这个问题源自系统bug,在此记录一下解决办法: 将高IO的磁盘,用以下参数remount即可 mount -t ext4 -o remou ...

  10. Linux nl命令详解

    nl常见命令参数 nl命令在linux系统中用来计算文件中行号 -b  :指定行号指定的方式,主要有两种: -b a :表示不论是否为空行,也同样列出行号(类似 cat -n): -b t :如果有空 ...