Educational Codeforces Round 21B. Average Sleep Time
题目描述:给n个睡眠数据,认为连续k个数据作为一周的天数,所以需要考虑n-k+1周,求所有周的平均睡眠时间。
解题思路:简单模拟即可。我的处理方法是先计算前k个数据的和。以后滑块的时候只需用sum减去这k个数据第一个数据加上最后一个数据的下一个数据即可。这样可以省了大量的计算时间,遍历一遍0(n)即可求解。
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iomanip>
using namespace std;
const int maxn=200000+10;
int slpt[maxn];
int main()
{
int n,k;
scanf("%d %d",&n,&k);
double sum=0,tot_sum=0;
for(int i=0;i<n;i++)
{
scanf("%d",&slpt[i]);
}
for(int i=0;i<k;i++)
{
sum+=slpt[i];
}
tot_sum+=sum/(n-k+1);
for(int i=1;i<n-k+1;i++)
{
sum-=slpt[i-1];
sum+=slpt[i+k-1];
tot_sum+=sum/(n-k+1);
}
cout << fixed << setiosflags(ios::left) << setprecision(10) << tot_sum << endl;
return 0;
}