P1419 寻找段落

题面

给定一个长度为 \(n\) 的序列 \(a\),定义 \(a_i\) 为第 \(i\) 个元素的价值。现在需要找出序列中最有价值的“段落”。段落的定义是长度在 \([S, T]\) 之间的连续序列。最有价值段落是指平均值最大的段落。

段落的平均值 等于 段落总价值 除以 段落长度

输入格式

第一行一个整数 \(n\),表示序列长度。

第二行两个整数 \(S\)\(T\),表示段落长度的范围,在 \([S, T]\) 之间。

第三行到第 \(n+2\) 行,每行一个整数表示每个元素的价值指数。

输出格式

一个实数,保留 \(3\) 位小数,表示最优段落的平均值。

数据范围

对于 \(30\%\) 的数据有 \(n \le 1000\)

对于 \(100\%\) 的数据有 \(1 \le n \le 100000\)\(1 \le S \le T \le n\)\(-{10}^4 \le a_i \le {10}^4\)

题目来源

tinylic 改编

思路

暴力好题。

代码

#include <bits/stdc++.h>
using namespace std;

int n,s,t,a[100005],qzh[100005];
double ans=-0x7f7f7f7f;

int main(){
	cin>>n>>s>>t;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        qzh[i]=qzh[i-1]+a[i];
    }
	for(int i=s;i<=t&&((double)clock() / CLOCKS_PER_SEC <= 0.95);i++){
		for(int j=i;j<=n;j++){
			ans=max(ans,(qzh[j]-qzh[j-i])/(double(i)));
		}
	}
	printf("%.3f",ans);
	return 0;
}
posted @ 2022-04-09 08:59  蒟蒻xiezheyuan  阅读(35)  评论(0编辑  收藏  举报