HDU 5248 序列变换
2015-09-24 20:09
351 查看
分析:题意可以理解为,给你含有n个正整数的数组a,让你找一个严格单调递增的数组b,使得cost(a,b)=max(|a[i]-b[i]|) (1<=i<=n)最小,我们可以二分查找答案,对于一个d,我们找一个数组b,看是否满足所有的cost<=d,如果满足则ans<=d,否则ans>d.找数组b的时候,b[i]肯定要>=a[i]-d,且b[i]>=b[i-1]+1,所以我们取这两个中较大的,如果b[i]>a[i]+d的话,那么cost就>d了,不满足条件,返回false。
# include <stdio.h> int n,a[100005],b[100005]; int Max(int a,int b) { return a>b?a:b; } bool F(int d) { int i; b[0]=a[i]-d-1; for(i=1;i<=n;i++) { b[i]=Max(a[i]-d,b[i-1]+1); if(b[i]>a[i]+d) return false; } return true; } int main() { int i,t=1,T,l,r,mid; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); printf("Case #%d:\n",t++); l=0;r=1000000; while(l<r) { mid=(l+r)/2; if(F(mid)) r=mid; else l=mid+1; } printf("%d\n",l); } return 0; }
相关文章推荐
- 询问任意区间的min,max,gcd,lcm,sum,xor,or,and
- Java基础知识强化67:基本类型包装类之Integer直接赋值的面试题
- Swift 分类 结构体
- Linux命令操作
- 欢迎使用CSDN-markdown编辑器
- LeetCode----Longest Valid Parentheses
- poj3069(贪心)
- 白话经典算法系列之十四 腾讯2012年笔试题
- 地图的使用
- UEditor 编辑器跨域上传解决方法
- java学习之多线程1
- Redis 命令 - Strings
- Learning Spark - LIGHTNING-FAST DATA ANALYSIS 第三章 - (1)
- 数的长度 69 (数学+log的使用)
- 记/usr/bin/pt-stalk 的一个小bug
- 抓接口过程
- 用命令行管理s3
- PAT(甲级)1033
- @suppressWarnings("unchecked") java 中是什么意思 (一般放dao查询方法上)
- hdu 4006 第K大的数(优先队列)