二分答案:
#include<iostream>
#include<stdio.h>
using namespace std;
int a[500001];
int b[500001];
int l;;
int n,m;
bool ok(int mid)
{
int sum=0;
int bsu=0;
for(int i=1;i<=n+1;i++)
{
b[i]=a[i]-a[i-1];
sum=sum+b[i];
if(mid<b[i])
return false;
if( sum>mid)
{
bsu++;
i=i-1;
sum=0;
}
else if(sum==mid)
{
bsu++;
sum=0;
}
if(i==n+1&&bsu<=m)
{
return true;
}
if(bsu>=m&&i<n+1)
{
return false;
}
}
return false;
}
int main()
{
while(scanf("%d%d%d",&l,&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
a[0]=0;
a[n+1]=l;
sort(a,a+n+1);
int left=l/m;
int right=l;
while(right>=left)
{
int mid=(right+left)/2;
if(ok(mid))
{
right=mid-1;
}
else
{
left=mid+1;
}
}
cout<<left<<endl;
}
return 0;
}
hdu 4004 The Frog's Games
最新推荐文章于 2021-04-06 20:57:27 发布