【51NOD-1243-排船問題】 二分
阿新 • • 發佈:2018-11-01
51NOD1243排船問題
題意
做法
程式碼
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define dbg(x) cout<<#x<<" = "<<x<<endl
const int maxn = 5e4+10;
int a[maxn];
int n,x,m;
bool check(int mid)
{
int head=0,tail=0;
for(int i=1;i<=n;i++)
{
head=tail;
if(head+x-mid<=a[i])
{
if(head+x+mid<=a[i])
{
head=a[i]-x-mid;
tail=head+2*x;
}
else
{
tail+=2*x;
}
}
else
{
return 0;
}
}
return tail<=m;
}
int main()
{
scanf("%d%d%d",&n,&x,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int l=0,r=m-1;
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid)) r=mid-1;
else l=mid+1;
}
if(l==m||2*n*x>m) printf("-1\n");
else printf("%d\n",l);
return 0;
}