题意
给n个数,求出任意连续k个数之和的平均值
思路
统计每个数会出现的次数,第i位(i从0开始)出现的次数是min(k,i+1)+min(k,n-i)-k,求和,再除以n-k+1即可
代码
#include <cstdio>
#include <algorithm>
using namespace std;
long long a[200001];
long long used[200001];
int main()
{
long long n,k;
double ans;
scanf("%I64d%I64d",&n,&k);
for(long long i=0;i<n;i++)
scanf("%I64d",&a[i]);
for(long long i=0;i<n;i++)
used[i]=min(k,i+1)+min(k,n-i)-k;
/*for(long long i=0;i<n;i++)
printf("%I64d ",used[i]);
printf("\n");*/
ans=0;
for(long long i=0;i<n;i++)
ans+=a[i]*used[i];
printf("%lf\n",ans/(n-k+1));
return 0;
}