本文主要是介绍CodeForces 808B-Average Sleep Time,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
CodeForces 808B-Average Sleep Time
-
题目链接:B. Average Sleep Time
-
思路:
给了n天睡眠时间,给了个计算公式,从第一天开始每k天之和/(n-k+1) 类似滑动窗口吧,保留10位小数
水题,但是如果每次都去求前k个和,会TL
每次窗口只移动一个单位,也就是最左一个被舍弃,再从最右进一个,所以求第一个前k和,后面每求和一次就减去最左,加入最右就ok
-
代码:
#include<iostream>
#include<iomanip>
#include<cstdio>
#define MAX_SIZE 200005
using namespace std;
int main()
{int n,k;double Sleep[MAX_SIZE];double Res=0.0;double Part=0.0;cin>>n>>k;int W=n-k+1;for(int i=0;i<n;i++){scanf("%lf",&Sleep[i]);if(i<k)Part+=Sleep[i]/(W*1.0); //窗口初始求和}for(int i=0;i<n-k+1;i++){if(i==0){Res=Part;continue;}Part-=Sleep[i-1]/(W*1.0); //减去最左Part+=Sleep[i+k-1]/(W*1.0); //加入最右Res+=Part;}cout<<fixed<<setprecision(10)<<Res<<endl;
}
这篇关于CodeForces 808B-Average Sleep Time的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!