【题目大意】
有N间牛舍和M头牛,告诉你每个牛舍的位置,求出两头牛之间最小距离的最大值。
【思路】
二分判断两头牛之间的最小距离d,通过贪心法进行验证。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 const int MAXN=100000+500; 8 int n,m; 9 int pos[MAXN]; 10 11 int whether(int d) 12 { 13 int now=1; 14 int nowpos=pos[0]+d; 15 for (int i=1;i<m;i++) 16 { 17 while (pos[now]<nowpos && now<n) now++; 18 if (now==n) 19 { 20 return 0; 21 } 22 nowpos=pos[now]+d; 23 } 24 return 1; 25 } 26 27 int main() 28 { 29 scanf("%d%d",&n,&m); 30 for (int i=0;i<n;i++) scanf("%d",&pos[i]); 31 sort(pos,pos+n); 32 33 int lb=0,ub=pos[n-1]; 34 while (ub-lb>1) 35 { 36 int mid=(lb+ub)/2; 37 if (whether(mid)) lb=mid; 38 else ub=mid; 39 } 40 cout<<lb<<endl; 41 return 0; 42 }
时间: 2024-10-29 10:46:26