2015Astar百度之星初赛 1005 序列变化
生活随笔
收集整理的這篇文章主要介紹了
2015Astar百度之星初赛 1005 序列变化
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
序列變換
Time Limit: 4000/2000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 114????Accepted Submission(s): 57
Problem Description 給定序列 A={A1,A2,...,An} , 要求改變序列A中的某些元素,形成一個(gè)嚴(yán)格單調(diào)的序列B(嚴(yán)格單調(diào)的定義為: Bi<Bi+1,1≤i<N )。
我們定義從序列A到序列B變換的代價(jià)為 cost(A,B)=max(|Ai?Bi|)(1≤i≤N) 。
請(qǐng)求出滿足條件的最小代價(jià)。
注意,每個(gè)元素在變換前后都是整數(shù)。
Input 第一行為測(cè)試的組數(shù) T(1≤T≤10) .
對(duì)于每一組:
第一行為序列A的長(zhǎng)度 N(1≤N≤105) ,第二行包含N個(gè)數(shù), A1,A2,...,An .
序列A中的每個(gè)元素的值是正整數(shù)且不超過 106 。
Output 對(duì)于每一個(gè)測(cè)試樣例,輸出兩行:
第一行輸出:"Case #i:"。i代表第 i 組測(cè)試數(shù)據(jù)。
第二行輸出一個(gè)正整數(shù),代表滿足條件的最小代價(jià)。
Sample Input 2 2 1 10 3 2 5 4
Sample Output Case #1: 0 Case #2: 1
Source 2015年百度之星程序設(shè)計(jì)大賽 - 初賽(1)
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=100000+5; int T,n,k; int buf[maxn]; bool C(int x) {int mins=buf[0]-x;for(int i=1; i<n; i++) {if(buf[i]+x<=mins)return false;//當(dāng)存在一個(gè)數(shù),他的最大值要小于前面那個(gè)數(shù)的最小值的//時(shí)候則表示不可以mins=max(mins+1,buf[i]-x);//下一個(gè)的最小值是這個(gè)數(shù)的最小值+1,或者buf[i]-x的最小值//總之mins必須要必前一個(gè)數(shù)大。}return true; } int main() {//freopen("D://imput.txt","r",stdin);scanf("%d",&T);for(int i=1; i<=T; i++) {scanf("%d",&n);for(int j=0; j<n; j++) {scanf("%d",&buf[j]);}//取到符合某種條件的最小值(二分法)int lb=-1,ub=0x3f3f3f3f;while(ub-lb>1) {int mid=(lb+ub)>>1;if(C(mid))ub=mid;else lb=mid;}printf("Case #%d:\n%d\n",i,ub);}return 0; }
總結(jié)
以上是生活随笔為你收集整理的2015Astar百度之星初赛 1005 序列变化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第31章 MySQL 处理重复数据教程
- 下一篇: 计算并输出0-1000含有7或者是7的倍