标签:选择 can 放大 cstring sort vector main for printf
1 #include<cstdio>
2 #include<iostream>
3 #include<algorithm>
4 #include<queue>
5 #include<map>
6 #include<vector>
7 #include<set>
8 #include<string>
9 #include<cmath>
10 #include<cstring>
11 using namespace std;
12 int n;//牛舍数目
13 int cow;//牛的数目
14 int a[100010];
15 bool ok(int dis)
16 {
17 int last=0;//第last是上一个放好牛的宿舍下标,第一个牛舍放第一头牛
18 int cur=last+1;//当前选择的牛舍,看看要不要放牛
19 int cnt=1;//记数看看已经放了几头牛
20 while(cur<n)
21 {
22 if(a[cur]-a[last]>=dis)//如果满足两个牛舍的间距>=dis说明这个
23 {//牛舍可以放牛 ,改变last和cur的值
24 last=cur;
25 cur++;
26 cnt++;
27 }
28 else
29 {
30 cur++;
31 }
32 }
33 return cnt>=cow;//这里是>=,因为可能可以放大于cow的牛,既然>都放得下
34 //那么cow就更可以放得下了
35 }
36 int main()
37 {
38 scanf("%d%d",&n,&cow);
39 for(int i=0;i<n;i++)
40 {
41 scanf("%d",&a[i]);
42 }
43 sort(a,a+n);
44 int l=0,r=0x3f3f3f3f;
45 for(int i=0;i<100;i++)
46 {
47 int mid=(l+r)/2;
48 if(ok(mid))
49 {
50 l=mid;
51 }
52 else
53 {
54 r=mid;
55 }
56 }
57 printf("%d\n",l);
58 return 0;
59 }
标签:选择 can 放大 cstring sort vector main for printf
原文地址:https://www.cnblogs.com/fudanxi/p/12217727.html