hdu 4004

//2分 水过

//判断 在 以mid 的长度 是否在 M次内 能通过;


 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<string.h>
 4 #include<algorithm>
 5 using namespace std;
 6 int L;
 7 int N,M;
 8 int len[500050];
 9 int solve(int step)
10 {
11     int s=0,count=0,i=0;
12     while(s<L)
13     {
14         s+=step;
15         while(len[i]<=s)
16             i++;
17         s=len[i-1];
18         count++;
19     }
20     return count;
21 }
22 int main()
23 {
24     while(~scanf("%d %d %d",&L,&N,&M))
25     {
26         for(int i=0;i<N;i++)
27             scanf("%d",&len[i]);
28         len[N]=L;
29         len[N+1]=2*L;
30         sort(len,len+N+1);
31         int ans=len[0];
32          for(int i=1;i<=N;i++)
33             if(len[i]-len[i-1]>ans)
34                 ans=len[i]-len[i-1];
35         long l=ans,r=L,mid;
36         while(l<r)
37         {
38             mid=(l+r)/2;
39             if(solve(mid)<=M)r=mid;
40             else l=mid+1;
41         }
42         cout<<l<<endl;
43     }
44     return 0;
45 }

 

 

posted on 2013-08-21 15:52  看见的是....  阅读(184)  评论(0)    收藏  举报