1 条题解
-
1
题目思路
循环模拟求温度最大值。
80pts code
# include <bits/stdc++.h> using namespace std; int main() { int T; cin >> T; while (T--) { int n, k; cin >> n >> k; double ret = 0; double sum = 0; for (int i = 1; i <= n; i++) { sum = sum * 1.00 / i + k; ret = max(ret, sum); } printf("%.1lf\n", ret); } return 0; }
这里可以发现普通的循环枚举效率太低,最后一个点超时了。
那如何解决呢?
通过枚举我们可以发现温度是先升后降的,所以在温度开始降的时候就可以加一点小优化跳出循环了。
AC Code
# include <bits/stdc++.h> using namespace std; int main() { int T; scanf("%d", &T); while (T--) { int n, k; scanf("%d%d", &n, &k); double ret = 0; double sum = 0; for (int i = 1; i <= n; i++) { sum = sum * 1.00 / i + k; if (sum < ret) { break; } ret = max(ret, sum); } printf("%.1lf\n", ret); } return 0; }
信息
- ID
- 14717
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者