站外题求助
  • 板块题目总版
  • 楼主NC20061226
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/19 22:32
  • 上次更新2024/12/20 16:43:04
查看原帖
站外题求助
965351
NC20061226楼主2024/12/19 22:32

题目描述

给定一个由 nn 个整数组成的数组 arrarr 和一个整数 kk,请找出平均值最大的、长度为 kk 的连续子数组,并返回该最大平均值,要求答案保留 22 位小数。

数据样例

输入数据

第一行:一个整数 nn,表示数组的长度。

第二行: nn 个整数。

第三行:一个整数 kk ,表示子数组的长度。

输出数据

输出一个浮点数,表示满足条件的最大平均数。

输入

6
1 12 -5 -6 5 -3
4

输出

1.50

解释

arr2arr5arr_2\sim arr_5 的总和 1256+54=1.5\dfrac{12-5-6+5}{4}=1.5

80pts80 \text{pts} CODE:

#include<cstdio>
#include<algorithm>

int n,a[200010],b[200010];
int right,left,cnt=-1e5;
double sum,k;

int main() {
    scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	scanf("%lf",&k);
	for(int i=1;i<=n;i++)
		b[i]=a[i]+b[i-1];
	// for(int i=1;i<=n;i++)
	// 	printf("%d ",b[i]);
	// printf("\n");
	for(left=1;left<=n;left++){
		right=left+k-1;
		if(right>n) break;
		//printf("%d %d  %d %d\n",b[right]-b[left-1],cnt,left,right);
		cnt=std::max(cnt,b[right]-b[left-1]);
	}sum=cnt;
	printf("%.2lf\n",sum/k);
    return 0;
}

思路:前缀和+模拟。

感谢各位大佬。

2024/12/19 22:32
加载中...