标签:ges puts nbsp ble style mod 长度 技术 blog
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1243
第1行:3个数N X M,中间用空格分隔(1 <= N <= 50000, 1 <= X <= 10^9, 1 <= M <= 10^9)。 第2 - N + 1行:每行1个数Pi,对应木桩的位置(0 <= Pi <= Pi+1 <= M),并且给出的数据是有序的。
输出最长绳子的最小值。如果码头排不下所有船则输出-1。
3 2 16 1 3 14
3
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 LL mod=1e9+7; 5 int x[50005],N,X,M; 6 bool ok(int k) 7 { 8 int pos=0,len=X*2; 9 for(int i=1;i<=N;++i) 10 { 11 if(x[i]<=pos+X){ 12 if(pos+X-x[i]<=k) pos+=len; 13 else return 0; 14 } 15 else{ 16 if(x[i]-(pos+X)<=k) pos+=len; 17 else pos=x[i]-k+X; 18 } 19 } 20 return pos<=M; 21 } 22 int main() 23 { 24 int i,j,k; 25 scanf("%d%d%d",&N,&X,&M); 26 for(i=1;i<=N;++i) 27 { 28 scanf("%d",x+i); 29 } 30 int l=0,r=M; 31 while(l<r) 32 { 33 int mid=l+(r-l)/2; 34 if(ok(mid)) r=mid; 35 else l=mid+1; 36 } 37 38 if(ok(l)) cout<<l<<endl; 39 else puts("-1"); 40 return 0; 41 }
标签:ges puts nbsp ble style mod 长度 技术 blog
原文地址:http://www.cnblogs.com/zzqc/p/7468032.html