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 }
浙公网安备 33010602011771号