[noip2015] 跳石头

来源:互联网 发布:关闭windows错误恢复 编辑:程序博客网 时间:2024/04/29 02:27

题目链接

题解:要求最小值最大,是典型的二分问题

#include <cstdio>#include <iostream>using namespace std;int L,n,m,l,r;int i,mid,ans;int d[65536]; inline void init(){    cin>>L>>n>>m;    for(int i=1;i<=n;i++)    scanf("%d",&d[i]);    d[++n]=L;}inline bool ok(int x){    int pos=0,w=0;    for(i=1;i<=n;i++)    if(d[i]-pos<x)  w++;//不符合条件,移走一块石头    else pos=d[i];//符合条件,更新距离    return w<=m; }  int main(){     init();    l=0,r=L;    while(l<=r)      {          mid=(l+r)>>1;          if(ok(mid))          ans=mid,l=mid+1;         else r=mid-1;      }      printf("%d",ans);    return 0;}  
0 0
原创粉丝点击