HDU 5248 序列变换 —— 二分
2015-06-02 00:34
330 查看
#include <stdio.h> #include <iostream> using namespace std; int a[100005], c[100005]; int mmin(int a, int b) { return a > b ? b : a; } int mmax(int a, int b) { return a > b ? a : b; } bool check(int value, int n) { c[0] = a[0] - value; for (int i = 1; i < n; ++i) { if (c[i - 1] >= a[i]) { c[i] = mmin(c[i - 1] + 1, a[i] + value); } else { c[i] = mmax(c[i - 1] + 1, a[i] - value); } if (c[i] <= c[i - 1]) { return false; } } return true; } int dowork() { int n; scanf ("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); } int min = 0, max = 2000000; while (min < max) { int mid = (min + max) / 2; if (check(mid, n)) { max = mid; } else { min = mid + 1; } } return min; } int main() { int cas; scanf("%d", &cas); for (int i = 1; i <= cas; ++i) { printf("Case #%d:\n%d\n", i, dowork()); } return 0; }
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 快速排序里的学问:从猜数字开始
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- HDU 1568
- HDU1290
- 屌丝的常用排序-----three