【AtCoder】AGC011 E - Increasing Numbers
题解
题是真的好,我是真的不会做
智商本还是要多开啊QwQ
我们发现一个非下降的数字一定可以用不超过九个1111111111...1111表示
那么我们可以得到这样的一个式子,假如我们用了k个数,那么最多的话可以是这样的
\(N = \sum_{i = 1}^{9k} (10^{r_i} - 1) / 9\)
\(9N + 9k = \sum_{i = 1}^{9k} 10^{r_{i}}\)
我们只要每次计算出9N + 9 ,9N + 18...,然后看看十进制下每一位的数字和有没有超过9k,直接加的话最坏情况是一次操作\(O(L)\)的,但是大家应该都有种直觉总的操作就是\(O(L)\)的……就是势能分析啦,不太会证,就是一次长的进位过后之后不会再进位了。。。
复杂度\(O(lg N)\)
代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <cmath>
#include <bitset>
#include <queue>
#define enter putchar('\n')
#define space putchar(' ')
//#define ivorysi
#define pb push_back
#define mo 974711
#define pii pair<int,int>
#define mp make_pair
#define fi first
#define se second
#define MAXN 200005
#define eps 1e-12
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;char c = getchar();T f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 - '0' + c;
c = getchar();
}
res = res * f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) out(x / 10);
putchar('0' + x % 10);
}
struct Bignum {
vector<int> v;
int sum;
Bignum operator = (string s) {
v.clear();
sum = 0;
for(int i = s.length() - 1 ; i >= 0 ; --i) {
v.pb(s[i] - '0');
sum += s[i] - '0';
}
return *this;
}
friend Bignum operator * (const Bignum &a,const int b) {
int s = a.v.size();
Bignum c;c.v.clear();
for(int i = 0 ; i <= s ; ++i) c.v.pb(0);
int g = 0;
for(int i = 0 ; i < s ; ++i) {
int x = a.v[i] * b + g;
c.v[i] = x % 10;
g = x / 10;
}
if(g) c.v[s] = g;
for(int i = s ; i > 0 ; --i) {
if(c.v[i] == 0) c.v.pop_back();
else break;
}
c.sum = 0;s = c.v.size();
for(int i = 0 ; i < s ; ++i) c.sum += c.v[i];
return c;
}
}A;
string s;
void Solve() {
cin>>s;
A = s;
A = A * 9;
int ans = 0;
while(1) {
int s = A.v.size();
int g = 9;
for(int i = 0 ; i < s ; ++i) {
if(!g) break;
A.sum -= A.v[i];
int x = A.v[i] + g;
A.v[i] = x % 10;
A.sum += A.v[i];
g = x / 10;
}
if(g) A.v.pb(g),A.sum += g;
++ans;
if(ans * 9 >= A.sum) break;
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}
【AtCoder】AGC011 E - Increasing Numbers的更多相关文章
- 【AtCoder】AGC011
AGC011 A - Airport Bus 大意:有N个人,每个人只能在\([T_i,T_i +K]\)这段区间乘车,每辆车安排C人,问最少安排几辆车 直接扫,遇到一个没有车的在\(T_i +K\) ...
- 【AtCoder】AGC011 D - Half Reflector
题解 大意是n个管子排成一排,每个管子有两种状态,A状态是从某个方向进去,从原方向出来,B状态是从某个方向进去,从另一个方向出来 球经过一个A状态的管子这个管子会立刻变成B状态,经过一个B状态的管子会 ...
- 【AtCoder】AGC011 C - Squared Graph
题解 大意是给出一张图,然后建一张新图,新图的点标号是(a,b) 如果a和c有一条边,b和d有一条边,那么(a,b)和(c,d)之间有一条边 我们把这道题当成这道题来做,给出两张图,如果第一张图有边( ...
- 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP
[BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...
- 【题解】Greatest Common Increasing Subsequence
[题解]Greatest Common Increasing Subsequence vj 唉,把自己当做DP入门选手来总结这道题吧,我DP实在太差了 首先是设置状态的技巧,设置状态主要就是要补充不漏 ...
- 【LeetCode】738. Monotone Increasing Digits 解题报告(Python)
[LeetCode]738. Monotone Increasing Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu ...
- 【LeetCode】165. Compare Version Numbers 解题报告(Python)
[LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- 【AtCoder】ARC092 D - Two Sequences
[题目]AtCoder Regular Contest 092 D - Two Sequences [题意]给定n个数的数组A和数组B,求所有A[i]+B[j]的异或和(1<=i,j<=n ...
- 【Atcoder】CODE FESTIVAL 2017 qual A D - Four Coloring
[题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj ...
随机推荐
- Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法
Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. fs.listFiles方法,返回Loc ...
- ElastAlert规则
elastalert 是一款基于elasticsearch的开源告警产品(官方说明文档).相信许多人都会使用ELK做日志收集系统,但是产生一个基于日志的“优秀”的安全告警确是一个难题.告警规则难编写, ...
- Nginx基础配置指令
nginx.conf文件的结构 ... #全局块 events{ #events块 ... } http{ #http块 ... #http全局块 server{ #server块 ... #serv ...
- 2. Jmeter压力测试简单教程(包括服务器状态监控) (转)
转自:https://blog.csdn.net/cbzcbzcbzcbz/article/details/78023327 前段时间公司需要对服务器进行压力测试,包括登录前的页面和登录后的页面,主要 ...
- GTD实践2周年后一些体会
从2011年7月1日算起,实践GTD已经有2年多了,在GTD一周年时写了<用iPhone打造GTD实践1周年的心得体会>这篇文章,随着实践的深入,如今又有了一些新的认识,2013年初制定的 ...
- Windows系统环境下Solr之Java实战(一)搭建solr服务器并配置IK分词
搭建solr服务器 1.下载地址:http://archive.apache.org/dist/lucene/solr/ 2.将D:\JavaWeb\Solr\solr-6.2.0\server\so ...
- 介绍一个基于jQuery的Cookie操作插件
在网页客户端,我们经常会遇到读取或者设置cookie的情况,如果用纯生的js我们可能会遇到一些兼容性带来的麻烦,这里给大家介绍一个比较实用jquery操作cookie的插件,插件的源代码如下: jQu ...
- java反射动态加载类Class.forName();
1,所有的new出来的对象都是静态加载的,在程序编译的时候就会进行加载.而使用反射机制Class.forName是动态加载的,在运行时刻进行加载. 例子:直接上两个例子 public class Ca ...
- <P>标签小细节
html标签对大小写不敏感. 注释:浏览器会自动地在段落的前后添加空行.(<p> 是块级元素) 提示:使用空的段落标记 <p></p> 去插入一个空行是个坏习惯.用 ...
- javascript 中检测数据类型的方法
typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...