[模拟]Codeforces509C Sums of Digits
题意:给n个数a[i], 要求b[i]每位数的和等于a[i], 并且b[i]要严格递增 求最小的b[i]
b[0]最小一定是X9999...这样的形式
后面的b[i]位数一定大于等于前一个
用ans[i][0]记录b[i]的位数
也就是 每次从ans[i-0][0]位开始 若不满足b[i]>b[i-1] 则位数加1
位数加1之后 必定满足b[i]>b[i-1] 则之后只需用递归遍历各位即可
int a[];
int ans[][];
bool dfs(int i, int num, int sum, bool f)
{
// printf("**********\n%d %d %d %d\n**********\n", i, num, sum, f);
if(!num)
return f;
for(int j=(f? (num==ans[i][]? :):ans[i-][num]);j<=;j++)
if(j+*(num-)>=sum && sum>=j && dfs(i, num-, sum-j, f || j>ans[i-][num]))
{
ans[i][num]=j;
return true;
}
return false;
}
int main()
{
int n;
while(~scanf("%d", &n))
{
for(int i=;i<=n;i++)
scanf("%d", &a[i]);
memset(ans, , sizeof(ans));
while(a[]>)
a[]-=, ans[][++ans[][]]=;
ans[][++ans[][]]=a[];
for(int i=ans[][];i>;i--)
printf("%d", ans[][i]);
printf("\n");
for(int i=;i<=n;i++)
{
ans[i][]=ans[i-][];
while(ans[i][]*<a[i])
ans[i][]++;
if(!dfs(i, ans[i][], a[i], ans[i][]>ans[i-][]))
{
ans[i][]++;
dfs(i, ans[i][], a[i], true);
}
for(int j=ans[i][];j>;j--)
printf("%d", ans[i][j]);
printf("\n");
}
}
return ;
}
Codeforces 509C
[模拟]Codeforces509C Sums of Digits的更多相关文章
- [codeforces 509]C. Sums of Digits
[codeforces 509]C. Sums of Digits 试题描述 Vasya had a strictly increasing sequence of positive integers ...
- cf509C Sums of Digits
C. Sums of Digits time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Sums of Digits CodeForces - 509C (贪心,模拟)
大意: 一个未知严格递增数组$a$, 给定每个数的数位和, 求$a[n]$最小的数组$a$ #include <iostream> #include <algorithm> # ...
- CodeForces 509C Sums of Digits(贪心乱搞)题解
题意:a是严格递增数列,bi是ai每一位的和,告诉你b1~bn,问你怎样搞才能让an最小 思路:让ai刚好大于ai-1弄出来的an最小.所以直接模拟贪心,如果当前位和前一个数的当前位一样并且后面还能生 ...
- 【codeforces 509C】Sums of Digits
[题目链接]:http://codeforces.com/contest/509/problem/C [题意] 给你一个数组b[i] 要求一个严格升序的数组a[i]; 使得a[i]是b[i]各个位上的 ...
- Codeforces 509C Sums of Digits
http://codeforces.com/contest/509/problem/C 题目大意: 给出一个序列,代表原序列对应位置数的每一位的数字之和,原序列单调递增,问原序列的最后一个数最小的方 ...
- Codeforces 509C Sums of Digits 贪心
这道题目有人用DFS.有人用DP 我觉得还是最简单的贪心解决也是不错的选择. Ok,不废话了,这道题目的意思就是 原先存在一个严格递增的Arrary_A,然后Array_A[i] 的每位之和为Arra ...
- 【HHHOJ】NOIP模拟赛 捌 解题报告
点此进入比赛 得分: \(30+30+70=130\)(弱爆了) 排名: \(Rank\ 22\) \(Rating\):\(-31\) \(T1\):[HHHOJ260]「NOIP模拟赛 捌」Dig ...
- AtCoder Beginner Contest 083 (AB)
A - Libra 题目链接:https://abc083.contest.atcoder.jp/tasks/abc083_a Time limit : 2sec / Memory limit : 2 ...
随机推荐
- JAXB - XML Schema Types, Binary Data
Data that has no "natural" representation with printable characters must, for inclusion in ...
- lua package path 设置方法
lua package path 设置方法: 添加环境变量LUA_PATH="/add_path/?.lua;;" 1.add_path为新添加的目录: 2.一定要添加双引号: 3 ...
- [xUnit]尝试单元测试
参考: http://xunit.github.io/ http://shouldly.readthedocs.org/en/latest/ 创建测试项目工程,类型选择类库,在NuGet中搜索xuni ...
- ThinkPHP3.2 加载过程(四)
前言: 由于比较懒散,但是又是有点强迫症,所以还是想继续把ThinkPHP3.2的加载过程这个烂尾楼补充完整. ========================================分割线= ...
- 实习笔记-1:sql 2008r2 如何创建定时作业
在公司实习了近一个月,学了很多东西.这一篇是一些比较基础的东西,本人是小菜鸟,不喜欢大神来喷.大神欢迎出门点右上角.谢谢~ 说大实话,对于数据库,我在还没出来实习的时候就是只懂写一些sql语句以及知道 ...
- 跟我一起学Vim补全神级插件--YouCompleteMe
最近重拾Vim,编译部署来补全插件YCM,这个插件的补全效果和在写C代码的时候的自动提示错误信息等还是十分棒的,写点心得下来,也算给自己做个备忘. 快速安装: 首先参考我的.vimrc配置,用Vund ...
- Linux初始root密码设置
刚安装好的Linux系统是没有设置root用户密码的,下边介绍如何设置root用户的密码 第一步:sudo passwd 第二步:输入密码 第三步:确认密码 这样三个步骤过后root用户的密码就设置好 ...
- make menuconfig出错需要安装文件
$ make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** 'ma ...
- Linux C 程序 空语句-gcc编译命令(SIX)
C语言语句1.空语句:当一个if或者while判断部分能完成工作,空语句可以用来表示if或者while内的空循环体 if(a == b ); 2.gcc编译器 //程序的编译过程: // 预处理:pr ...
- ContextMenuOpening 事件
ContextMenuOpening事件,不能在将要触发的目标ContextMenu中触发,只能包含 这个ContextMenu的父控件中触发该事件. 在ListView中,希望控制右键弹出菜单时,可 ...