这道题看着很简单,但是题目的测试量有点大,容易超时,不能使用暴力破解
而且我个人觉得这题目四舍五入的数据怪怪的,NA好多次,最后四舍五入的数据用3以后能用了
原题如下:
内容:
放暑假了,小明想上网下载一些电影看,但是缓慢的网速令他无法忍受。他了解到了接下来的N个小时中的网速情况,想找一段连续的M个小时来下载电影,并且希望这M个小时的平均网速尽可能的大,你能编一个程序帮助他实现愿望吗?
输入输入文件第一行包含两个整数N、M,1<=M<=N<=1000000;第二行包含N个整数,表示第N个小时的网速。相邻两数之间用空格隔开。
输出输出文件仅有一行包含一个实数,表示最大的平均网速,保留小数点后两位。
样例
输入
6 3
3 6 1 5 6 4
输出
5.00
下面是代码:
#include<algorithm>
#include<iostream>
#include<stdio.h>
using namespace std ;
int main () {
long int n , m ;
cin >> n ;
cin >> m ;
static long int num =0;
int cmp(int x, int y) ;
long int speed[1000000]={0} ,total[1000000]={0} ;
for(long int i = 0 ; i< n ; i++) {
cin >> speed[i] ;
}
/*for(long int j = 0 ;j < (n-m) ;j++) {
for(long int k=0;k<m;k++){
total[j] += speed[j+k] ;
}
}*/
for(long int k =0 ; k <m;k++) {
total[0] +=speed[k] ;
}
for(long int j = 1 ;j < (n-m) ; j++) {
total[j] = total[j-1]-speed[j-1] +speed[m-1+j] ;
}
sort(total,total+n-m,cmp) ;
float answer = total[0]*1.00/m ;
//float end =(int)((answer * 100) + 0.5)*1.0 / 100.0;
float end = ( answer*1000 + 3 ) *1.0/1000.0;
printf("%.2f",end);
}
int cmp(int x ,int y) {
return x> y ;
}
好坑的题目
原文地址:http://blog.csdn.net/hhooong/article/details/43703493