竞赛
考级
浅夏.山橘月
Tian
进击的奶牛 > 见微知著:类似于最大值最小的问题或最小值最大的问题我们可以使用二分——沃兹基硕德 此题就是求最小值最大问题,为此我们可以二分最小值,然后使用函数检查“这个最小值是否满足成为一个合格的最小值” 二分的下限我们一开始设为000,上限设为最大的牛棚左边−最小的牛棚左边最大的牛棚左边-最小的牛棚左边最大的牛棚左边−最小的牛棚左边 (记得排序) 如果满足的话我们肯定要将区间右移成为 (mid,right](mid,right](mid,right] 不满足的话就是相反操作(退而求其次)左移区间成为 [left,mid][left,mid][left,mid] Ps.注意开闭区间 检查函数的内容为:是否至少有mmm个牛棚两两之间间距至少大于等于xxx (这个不难想出) 最后.谢谢你阅读这篇题解
Lee Wen
题目大意 最大化最近的两头牛之间的距离。 题目思路 二分答案,看每个答案是否能满足条件即可。 CODE
yjynb666
130****2044
飞的智动
#include<bits/stdc++.h> using namespace std; int main(){ }
Null
zsy
陈114514
#include<bits/stdc++.h> using namespace std; int n, c, a[100005]; int func(int x){ int cnt = 1; int fx = a[1]; for(int i = 2; i <= n; i++) { if(a[i] - fx >= x){ cnt++; fx = a[i]; } } return cnt; } int main(){ cin >> n >> c; for(int i = 1; i <= n; i++) { cin >> a[i]; } sort(a + 1, a + n + 1); int l = 1, r = a[n] - a[1], ans; while(l <= r){ int mid = (l + r) / 2; if(func(mid) >= c){ l = mid + 1; ans = mid; } else { r = mid - 1; } } cout << ans; return 0; }
小清凝
🤡
提交答案之后,这里将显示提交结果~