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;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务