提交时间:2026-06-12 14:34:18
运行 ID: 90803
#include <iostream> #include <vector> #include <algorithm> using namespace std; int N, C; vector<int> pos; // 判断间距d是否可以放下C头牛 bool check(int d) { int cnt = 1; // 第一头牛放第一个位置 int last = pos[0]; for (int i = 1; i < N; ++i) { if (pos[i] - last >= d) { cnt++; last = pos[i]; if (cnt == C) return true; } } return cnt >= C; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> C; pos.resize(N); for (int i = 0; i < N; ++i) { cin >> pos[i]; } sort(pos.begin(), pos.end()); // 二分左右边界 int l = 1; int r = pos.back() - pos[0]; int ans = 0; while (l <= r) { int mid = l + (r - l) / 2; // 防溢出 if (check(mid)) { ans = mid; l = mid + 1; // 可以,尝试更大距离 } else { r = mid - 1; // 不行,缩小距离 } } cout << ans << endl; return 0; }