1 条题解

  • 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;
    }
    
    • 1

    信息

    ID
    14717
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    1
    已通过
    1
    上传者