信息
- ID
- 14717
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
循环模拟求温度最大值。
# 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;
}
这里可以发现普通的循环枚举效率太低,最后一个点超时了。
那如何解决呢?
通过枚举我们可以发现温度是先升后降的,所以在温度开始降的时候就可以加一点小优化跳出循环了。
# 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;
}