题目描述 贪财的小梦发现了一条宝石串,它分为 n,1<=n<=100000个等长的部分(长度均为1),每一部分的价值为a_i (a_i<=10000)。小梦很想把它全都拿走,但是它包的空间不够大,只能装 [s,t]1<=s<=t<=100000,长度范围内的宝石串。 因为小梦可能以后还要装其他财宝,所以他想在 [s,t]的长度范围内选择平均价值最高的一段,也就是他选择的宝石串中所有的 求和再除以选择的宝石串长度。 注意,因为宝石串只有连续价值才会高,所以他会选择连续的一段。 输入格式 第一行输入 n,s,t。分别表示宝石串的长度,小梦想取走的长度范围长度范围 第二行输入 n 个整数,表示每一部分宝石串的价值。 输出格式 输出一个浮点数,表示小梦能选择的平均价值最高的一段宝石串的平均价值。保留三位小数。
输入输出样例
输入数据
1
3 2 2
3 -1 2
输出数据 1
1.000
我的代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n , s , t;
int a[N] , b[N];
double maxn = -10005.0;
int main() {
cin >> n >> s >> t;
for(int i = 1 ; i <= n ; i++){
cin >> a[i];
b[i] = b[i - 1] + a[i];
}
for(int i = s ; i <= t ; i++){
for(int k = 1 ; k <= n - i + 1 ; k++){
for(int j = k ; j <= k + i ; j++){
maxn = max(maxn , b[j + i] - b[j - 1] / i * 1.0);
// cout << maxn << " " << j << endl;
// cout << i << endl;
}
}
}
cout << fixed << setprecision(3) << maxn;
return 0;
}