站外题求助(悬关*2)很急
  • 板块题目总版
  • 楼主2011Andy
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/6 16:32
  • 上次更新2023/11/3 05:34:22
查看原帖
站外题求助(悬关*2)很急
660871
2011Andy楼主2023/8/6 16:32

题目描述 贪财的小梦发现了一条宝石串,它分为 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;
}

2023/8/6 16:32
加载中...