1 条题解
-
0
题解:
因为Monster是懒狗,所以题解也很水。观察题目可知,对于不同的速度都对应一个全程时间,考虑枚举答案,题目范围为,可以二分枚举。
由于时速必须为正整数,因此二分的下界为 1;对于二分的上界,我们考虑最高的时速要求即为 ,同时为二分时速的上界。
在二分过程中,假设当前时速为 mid,我们计算对应时速下到达终点的时间 t,并与比较以判断能否按时到达。
对于每个,求出对应的列车消耗时间,如果时间还有剩余,则减小,否则增加,时间复杂度,为数组长度,为二分区间大小,空间复杂度。
代码
#include <bits/stdc++.h> using namespace std; bool check(int x, vector<int>& dist, double time) { int len = dist.size() - 1; double temp = 0; for (int i = 0; i < len; i++) { // 注意时间取整 if (dist[i] <= x) temp++; else { if (dist[i] % x == 0) temp += (dist[i] / x); else temp += (dist[i] / x + 1); } } temp += double(dist[len]) / double(x); if (temp <= time) return true; else return false; } int main() { int n; double time; cin >> n; vector<int> dist(n); for (int i = 0; i < n; i++) cin >> dist[i]; cin >> time; int left = 1, right = 10000000; while (left <= right) { int mid = (left + right) >> 1; if (check(mid, dist, time)) right = mid - 1; else left = mid + 1; } if (check(left, dist, time)) cout << left; else cout << -1; return 0; }
- 1
信息
- ID
- 214
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 104
- 已通过
- 27
- 上传者