1 条题解
-
0
二分答案
首先数据不是有序的,先排序
sort(a + 1, a + 1 + n)
;可以知道答案的左边界是: ,答案的右边界是:
接下来二分, 函数。
bool check(int x) { int cnt = 1, last = a[1]; // 上一次放兔子的位置 for (int i = 2; i <= n; i++) { if (a[i] - last >= x) { cnt++; last = a[i]; } } return cnt >= m; // true -> l = mid + 1; false -> r = mid - 1; } ... while (l <= r) { int mid = (long long)(l + r) / 2; if (check(mid)) l = mid + 1; else r = mid - 1; } cout << r << endl;
- 1
信息
- ID
- 3
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 26
- 已通过
- 7
- 上传者