编程之美第三题 序列变换tiyi
来源:互联网 发布:linux装tensorflow 编辑:程序博客网 时间:2024/06/11 05:02
题意: 给你一个序列 , 让你改变序列中的所有值, 最后保证序列变成一个绝对递增的序列 , 也就是每个a[i+1] 〉a[i], 然后有一个消耗为 max | a[i] - b[i]|, 问消耗最小为多少。
题解: 很显然 最大值最小问题, 明显二分, 然后再保证第一个最小的同时 , 后面的和第一个尽量靠近, 然后就A了 , 这次编程之美比赛题目确实好水呀, 没sei了!
代码:
#include<stdio.h>int n, mark[1000005], value[1000005];int slove(int x){ for(int i = 1; i <= n; i++) mark[i] = value[i]; // if(x >= mark[1]) mark[1] = 1; mark[1] -= x; for(int i = 2; i <= n; i++) { if(mark[i] + x <= mark[i-1]) return 0; if(mark[i] - x > mark[i-1]) mark[i] -= x; else mark[i] = mark[i-1] + 1; } return 1; } int main(){ int T, flag1 = 1; scanf("%d", &T); while(T--) { scanf("%d", &n); int flag = 0, Max; scanf("%d", &value[1]); Max = value[1]; for(int i = 2; i <= n; i++) { scanf("%d", &value[i]); if(value[i] <= value[i-1]) flag = 1; if(Max < value[i]) Max = value[i]; } printf("Case #%d:\n", flag1 ++); if(!flag) { printf("0\n"); continue; } int l = 1, r = 1000004, mid, ans; while(l <= r) { mid = (r+l)/2; // printf("%d\n", mid); if(slove(mid)) { ans = mid; r = mid - 1; } else l = mid + 1; } printf("%d\n", ans); } }
0 0
- 编程之美第三题 序列变换tiyi
- 编程之美初赛第三题
- 编程之美资格赛第三题:树上的三角形
- 微软2013 编程之美 第三题 树上的三角形
- 编程之美大赛第三题 树上的三角形 .
- 2014编程之美资格赛第三题-格格取数
- 编程之美初赛第三题 活动中心 (三分法)
- 2015编程之美初赛第三题质数相关
- 编程之美资格赛 第二题 回文字符序列 dp
- 编程之美 最长递增序列
- 编程之美 - 数组最长子序列
- 编程之美之最长递增子序列实现
- 2014 编程之美 资格赛 第三题 格格取数(二分图带权最小边覆盖)
- 2014 编程之美 预赛第三题 格格取数 上下界费用流
- 2014微软编程之美初赛第一场第三题 活动中心
- 编程之美2014年资格赛第三题格格取数
- hihocoder 2015编程之美 资格赛 hihocoder 第三题 基站选址
- 回文字符序列——微软编程之美2015资格赛第2题题解
- HDU--3333(树状数组+离线处理)
- IOS中操作表ActionSheet
- 为什么要使用序列化
- Android 中双击退出
- 【算法】一致性哈希算法详解
- 编程之美第三题 序列变换tiyi
- DFS&Iteration Binary Tree Postorder Traversal
- Project Euler:Problem 15 Lattice paths
- 【十二】队列及其顺序存储结构
- swf文件格式解析入门(文件头解析)
- Xcode開發環境用什麼字體好?
- swf文件格式解析入门(tag解析)
- Java代码 实现直接选择排序
- 【编程语言-Java】Java创建线程的两个方法