您的位置:首页 > 其它

洛谷Luogu-267 跳石头(NOIP提高组2015 day2 t1)(二分答案) HQG_AC的博客

2018-02-20 11:07 651 查看
也是一道二分答案。这几年NOIP很喜欢考二分答案么。

二分最远距离,check当前情况符不符合;
1.如果两石头之间的距离小于k,就拆掉当前石头;
2.不然一这块石头为起点继续枚举。

我的两次错误:
1.a数组只开了50000,要开大点
2.l的初始值是0,r是L,条件是l+1<r,输出是r
详见代码:#include <bits/stdc++.h>
using namespace std ;
int a[50030] ;
int n,m,L ;
int check(int k)
{
int t=a[1],ans=0 ;
for (int i=2;i<=n-1;i++)
{
if (a[i]-t<=k) ans++ ;//该石头扔掉
else t=a[i] ;
}
if (ans>m) return 0 ;
else return 1 ;
}
int main()
{
scanf("%d%d%d",&L,&n,&m) ;
a[1]=0 ;
for (int i=2;i<=n+1;i++) scanf("%d",&a[i]) ;
a[n+2]=L ;
n+=2 ;
int l=0,r=L,mid ;
while (l+1<r)
{
mid=(l+r)>>1 ;
if (check(mid)) l=mid ;
else r=mid ;
}
printf("%d",r) ;
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: