codeforce-1003C
尺取法
题意:给定第一行给定n,k,第二行给定n个ai的值,求至少连续k个ai的平均值的最大值
思路:尺取法,因为范围不大,直接从连续的k个值枚举到连续的n个值,依次求出最大的平均值就是答案。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e3+5;
const int INF = 0x3f3f3f3f;
int a[maxn];
int n,k;
void solve(){
double ave = (double)(-INF);
for(int i=k;i<=n;i++){
int s=0,t=0,number = 0;
int sum = 0;
for(;;){
while(t<n && number < i){
sum+=a[t++];
number++;
}
double temp = (double)sum/(double)i;
ave = (temp-ave)>0.00000001?temp:ave;
number --;
sum -= a[s++];
if(t == n) break;
}
}
printf("%.15f\n",ave);
}
int main(){
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
solve();
return 0;
}