洛谷 P2678 跳石头

P2678 跳石头

二分

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define maxn 1000000
 4 #define inf 1<<30
 5 
 6 int n,m,c,pos[maxn];
 7 
 8 bool check(int now)
 9 {
10     int f=0,s=0;
11     for(int i=1;i<=n+1;i++)
12     {
13         if(pos[i]-s<now) f++;
14         else s=pos[i];
15     }
16     return f>m?false:true;
17 }
18 
19 int main()
20 {
21     scanf("%d%d%d",&c,&n,&m);
22     for(int i=1;i<=n;i++) scanf("%d",&pos[i]);
23     int l=1,r=c; pos[n+1]=c;
24     while(l+1<r)
25     {
26         int mid=(l+r+1)/2;
27         if(check(mid)) l=mid;
28         else r=mid;
29     }
30     if(check(r)) l=r;
31     printf("%d\n",l);
32     return 0;
33 }
View Code

 

posted @ 2017-09-05 20:21  Alex丶Baker  阅读(122)  评论(0编辑  收藏  举报