二分 River Hopscotch (poj 3258)
程序员文章站
2024-03-17 15:34:22
...
一道二分答案的问题,我知道做法,但是方案我也不知道 为啥呢么分,可能脑子不是太好使,先记录下来回头打打思路题,再来想这个题
AC代码:
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+5;
int a[maxn];
int L,n,m;
bool check(int mid)
{
int st,k;
st=0,k=0;//最多可以删掉多少个石头
for(int i=1; i<=n; i++)
{
if(a[i]-st<mid)
{
k++;
}
else
st=a[i];
}
if(L-st<mid)
{
return false;
}
if(k>m)
return false;//距离偏大
return true;//偏小
}
int main()
{
while(~scanf("%d %d %d",&L,&n,&m))
{
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+1+n);
int l=0,r=L,ans;
while(r>=l)
{
int mid=l+r>>1;
if(check(mid))
{
l=mid+1;
ans=mid;
}
else
{
r=mid-1;
}
}
printf("%d\n",ans);
}
}
推荐阅读
-
POJ 3258 River Hopscotch(二分)
-
二分 River Hopscotch (poj 3258)
-
3258 POJ River Hopscotch(二分)
-
poj 3258 River Hopscotch 【二分】
-
POJ 3258 River Hopscotch(二分)
-
POJ 3258 -- River Hopscotch(二分)
-
POJ3258 River Hopscotch(二分+贪心)
-
POJ3258 River Hopscotch (二分,最小值最大化)
-
Poj 3258 River Hopscotch 二分
-
POJ3258 River Hopscotch 二分 java