[agc011E]Increasing Numbers-[思考题]
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-[思考题]的更多相关文章
- [AGC011E] Increasing Numbers [数学]
题面 传送门 思路 首先,我们观察一下上升数的性质 可以发现,它一定可以表示为最多9个全是1的数字的和 那么我们设$N$可以被表示成$k$个上升数的和,同时我们设$p_i=\underbrace{11 ...
- [agc011e]increasing numbers
题意: 如果一个十进制非负整数的所有数位从高位到低位是不减的,我们称它为“上升数”,例如1558,11,3,0都是上升数,而10,20170312则不是: 给定整数N,求最小的k使得N能被表示为k个上 ...
- AGC011-E Increasing Numbers
题意 给定一个数\(n\),\(n≤10^{500,000}\),问\(n\)最少可以拆分成几个不降数的和.一个不降数是在十进制位下,从高位往低位看,每个数都不会比高位的数更小的数 做法 不降数可以拆 ...
- 【AtCoder】AGC011 E - Increasing Numbers
题解 题是真的好,我是真的不会做 智商本还是要多开啊QwQ 我们发现一个非下降的数字一定可以用不超过九个1111111111...1111表示 那么我们可以得到这样的一个式子,假如我们用了k个数,那么 ...
- AT2341 Increasing Numbers
传送门 还是猜结论呢 然后我们就想我们可以每次去掉尽量多的位数来保证次数最小,假装这是对的,先写一发,A了 考虑如何去掉尽量多的位数,我们可以找到最大的几位的不下降序列,把最后一个-1,后面全部改成9 ...
- AtCoder Grand Contest 011 E - Increasing Numbers(灵性乱搞)
题意: 当一个整数高位数字总不小于低位数字,或者说写成字符串之后单调不下降,称之为上升数.求一个整数最少能表示为多少个上升数的和.(n<=1e500000) 分析: 考虑那些不下降的数字,一定可 ...
- NOIp2018模拟赛四十
今天太晚了...题解到时候补吧(flag立好) 成绩:100+0+0=100 感觉A题本质暴力贪心?C题一道水题我居然没做...亏爆 A:[agc011e]increasing numbers B:[ ...
- POJ 1239 Increasing Sequences 动态规划
题目链接: http://poj.org/problem?id=1239 Increasing Sequences Time Limit: 1000MSMemory Limit: 10000K 问题描 ...
- TZOJ 5963 Increasing Sequences(线性DP)
描述 Given a string of digits, insert commas to create a sequence of strictly increasing numbers so as ...
随机推荐
- 在 Linux 上创建虚拟机规模集和部署高度可用的应用
利用虚拟机规模集,可以部署和管理一组相同的.自动缩放的虚拟机. 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率.内存需求或网络流量)进行自动缩放. 在本教程 ...
- cookie 常用的几种方法
{ setCookie: function(sName, sValue, oExpires, sPath, sDomain, bSecure) { var sCookie = sName + &quo ...
- [OPENSSL下载][证书] OPENSSL将PFX证书转换为PEM格式
OpenSSL Convert PFX Convert PFX to PEM openssl pkcs12 -in certificate.pfx -out certificate.cer -node ...
- 使用vue做项目
使用vue做项目需要用到node.js的npm来管理包 所以我们需要先下载node.js然后通过node的npm来管理包 安装完 nodejs后 我们需要执行 npm install vue-cli ...
- [翻译] UPCardsCarousel
UPCardsCarousel UPCardsCarousel is a carousel with a cards based UI for iOS. UPCardsCarousel是一个旋转木马效 ...
- EXC_BAD_ACCESS错误
EXC_BAD_ACCESS错误 一直都是使用ARC开发,咋就莫名其妙的出现这种EXC_BAD_ACCESS错误. 一直都是是怀疑在block中有着特殊处理,导致了使用时出现了这种错误,查找了好久.. ...
- 解决Oracle11g密码180天过期,账号锁住的问题
1.查看用户的proifle是哪个,一般是default: sql>SELECT username,PROFILE FROM dba_users; 2.查看指定概要文件(如default)的密码 ...
- 铁乐学Python_Day35_Socket模块3和hmac模块
验证客户端链接的合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂, 那么可以利用hmac+加盐的方式来实现. 例1:简单的服务端如下 #!/usr/bin/env ...
- 【Excel】SUMIF的错位问题
具体情况是这样的: 如图,我们需要求得“一车间”的“发生额总计”,所以我们选择使用SUMIF函数 如果是这样填写函数参数的话,那你的计算结果就会有问题 就会出现下图这样的情况,“发生额总计”为34.8 ...
- 微信公众平台OAuth2.0授权
1. 配置授权回调页面域名 进入微信公众平台后台后,依次进入开发者中心-权限表,找到网页授权获取用户基本信息,点击右侧的修改. 授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为: ...