寻找段落

寻找段落

题目描述

给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值。现在需要找出序列中最有价值的“段落”。段落的定义是长度在[S,T]之间的连续序列。最有价值段落是指平均值最大的段落,

段落的平均值=段落总价值/段落长度。

输入格式

第一行一个整数n,表示序列长度。

第二行两个整数S和T,表示段落长度的范围,在[S,T]之间。

第三行到第n+2行,每行一个整数表示每个元素的价值指数。

n\ (1\le n \le

输出格式

一个实数,保留 3 位小数,表示最优段落的平均值。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

4
3 4
5 3 -3 9

样例输出

3.500

代码:

 #include<iostream>
 #include<iomanip>
 using namespace std;
 
 double findValue3(int *arr,int n,int len){
     double maxdemo=-0xffffff,sum;
     for (int i = 1; i <= n-len+1; i++)
     {
         sum=0;
         for (int j = i; j < i+len; j++)
         {
             sum+=arr[j];
         }
         if (sum>maxdemo)
         {
             maxdemo=sum;
         }
     }
     return maxdemo/len;    
 }
 int main(){
     int n;
     cin>>n;
     int S,T;
     cin>>S>>T;
     int *arr = new int[n+1];
     for (int i = 1; i <= n; i++)
     {
         cin>>arr[i];
     }
     double sum=0,max=-0xffffff;
     for (int i = S; i <= T; i++)
     {
         double value=findValue3(arr,n,i);
         if(value>max){
             max=value;
         }
     }
     cout<<setiosflags(ios::fixed)<<setprecision(3)<<max<<endl;
 
 }

 

 

posted @ 2020-04-06 22:05  多发Paper哈  阅读(123)  评论(0编辑  收藏  举报
Live2D