The heat during the last few days has been really intense. Scientists from all over the Berland study how the temperatures and weather change, and they claim that this summer is abnormally hot. But any scientific claim sounds a lot more reasonable if there are some numbers involved, so they have decided to actually calculate some value which would represent how high the temperatures are.

Mathematicians of Berland State University came up with a special heat intensity value. This value is calculated as follows:
Suppose we want to analyze the segment of n  consecutive days. We have measured the temperatures during these n days; the temperature during i-th day equals ai .
We denote the average temperature of a segment of some consecutive days as the arithmetic mean of the temperature measures during this segment of days. So, if we want to analyze the average temperature from day x to day y, we calculate it as y∑i=xaiy−x+1 (note that division is performed without any rounding). The heat intensity value is the maximum of average temperatures over all segments of not less than k consecutive days. For example, if analyzing the measures [3,4,1,2] and k=3, we are interested in segments [3,4,1], [4,1,2] and [3,4,1,2]   (we want to find the maximum value of average temperature over these segments).
You have been hired by Berland State University to write a program that would compute the heat intensity value of a given period of days. Are you up to this task?

Input

The first line contains two integers n and k (1≤k≤n≤5000) — the number of days in the given period, and the minimum number of days in a segment we consider when calculating heat intensity value, respectively. The second line contains n integers a1, a2, ..., an (1≤ai≤5000) — the temperature measures during given n days.

Output

Print one real number — the heat intensity value, i. e., the maximum of average temperatures over all segments of not less than k consecutive days.

Your answer will be considered correct if the following condition holds: |res−res0|<10−6, where res is your answer, and res0 is the answer given by the jury's solution.
Example
Input

4 3
3 4 1 2

Output

2.666666666666667

题目意思:求连续不小于k天各区段的平均温度的最大值。

解题思路:我当时做题的时候是用的前缀和求出连续区段的平均值,之后师哥又提供了一种另一种思路使用尺取的思想,这里给出两种方法的代码。

 前缀和代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[];
int s[];
int main()
{
int n,k,i,t,j,p;
double ans;
scanf("%d%d",&n,&k);
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
}
s[]=a[];
for(i=;i<n;i++)
{
s[i]=s[i-]+a[i];///求前缀和
}
p=;
ans=0.0;
for(i=k;i<=n;i++)///i代表天数,至少是k天
{
for(j=;j<=n-i;j++)
{
if(j==)
{
t=s[j+i-];
}
else
{
t=s[j+i-]-s[j-];
}
if((double)t/i>ans)
{
ans=(double)t/i;
}
}
}
printf("%lf\n",ans);
return ;
}

尺取代码:

 #include<stdio.h>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int a[];
int main()
{
int n,k,i,j,p,q;
double ans,sum;
scanf("%d%d",&n,&k);
for(i=; i<n; i++)
{
scanf("%d",&a[i]);
}
ans=-INF;
for(i=k; i<=n; i++)///至少是k天最多n天
{
sum=;
for(j=; j<i; j++)
{
sum+=a[j];
}
ans=max(ans,sum/i);
q=;
p=i;
while(p!=n)
{
sum=sum-a[q++];///扩大右端点
sum=sum+a[p++];///扩大左端点,但仍保持长度不变
ans=max(ans,sum/i);
}
}
printf("%lf\n",ans);
return ;
}

Intense Heat(前缀和或尺取)的更多相关文章

  1. Lecture Sleep(尺取+前缀和)

    Description 你的朋友Mishka和你参加一个微积分讲座.讲座持续n分钟.讲师在第i分钟讲述ai个定理.   米什卡真的对微积分很感兴趣,尽管在演讲的所有时间都很难保持清醒.给你一个米什卡行 ...

  2. poj2566尺取变形

    Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronaut ...

  3. POJ3061 Subsequence 尺取or二分

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  4. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】

    任意门:http://codeforces.com/contest/1073/problem/C C. Vasya and Robot time limit per test 1 second mem ...

  5. POJ:2566-Bound Found(尺取变形好题)

    Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5408 Accepted: 1735 Special J ...

  6. 2018亚洲区预选赛北京赛站网络赛 D.80 Days 尺取

    题面 题意:你带着K元要去n个城市,这n个城市是环形的,你可以选择任意一个起点,然后顺时针走,对于每个城市,到达时可以获得a元,但是从这里离开又需要花费b元,问你能否找到一个起点(输出花钱最少的那个) ...

  7. POJ-3061 Subsequence 二分或尺取

    题面 题意:给你一个长度为n(n<100000)的数组,让你找到一个最短的连续子序列,使得子序列的和>=m  (m<1e9) 题解: 1 显然我们我们可以二分答案,然后利用前缀和判断 ...

  8. Gym 101257G:24(尺取)

    http://codeforces.com/gym/101257/problem/GGym 101257G 题意:给出n个人,和一个数s,接下来给出每个人当前的分数和输掉的概率.当一个人输了之后就会掉 ...

  9. Codeforces - 1191E - Tokitsukaze and Duel - 博弈论 - 尺取

    https://codeforc.es/contest/1191/problem/E 参考自:http://www.mamicode.com/info-detail-2726030.html 和官方题 ...

随机推荐

  1. React简单实现双向数据绑定

    import React, { Component } from 'react' import ReactDOM from 'react-dom' class App extends Componen ...

  2. $(document).ready(function(){})与window.load

    $(document).ready(function(){ //to do something}) 是当文档全部加载完全的时候触发,包括img也加载完成但是相关的文件没有下载下来,能同时编写多个 wi ...

  3. WebGl 缩放(矩阵变换)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. [Doctrine Migrations] 数据库迁移组件的深入解析四:集成diff方式迁移组件

    场景及优势 熟悉Symfony框架之后,深刻感受到框架集成的ORM组件Doctrine2的强大之处,其中附带的数据迁移也十分方便.Doctrine2是使用Doctrine DBAL组件把代码里面的表结 ...

  5. day 34线程的其他方法,线程池

    线程的其他方法:  from threading import Thread,current_thread: currrent_thread().getName()  获取线程的名称 current_ ...

  6. Mysql修改密码以及权限问题

    mysql修改密码小步骤 错误分析: 一开始是密码错误导致,先添加skip-grant-tables(这个配置无视权限的,添加直接回车登录即可),尽心修改密码,发现错误照旧 百度了一下,发现是mysq ...

  7. NOR Flash的原理与操作

    学习目标: 1.了解nor flash存储芯片的概念和特性 2.掌握使用s3c2440芯片对外挂的nor flash进行读写擦除操作 1.NOR Flash的简单介绍 NOR Flash最早是由Int ...

  8. 【树形DP】洛谷1122_最大子树和

    又是一道树形DP的入门题,思想非常简单  然而我最开始还是存了两个状态[传送门] 题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上 ...

  9. easyui -validatebox 验证框加载

    问题: easyui验证狂框有时会验证输入字符的位数,或者验证有效字符组合 解决: 使用easyui的验证框,继承验证框,指定输入框为验证框即可 $(function(){ $.extend($.fn ...

  10. Nginx入门篇(七)之Nginx+keepalived高可用集群

    一.keepalived介绍 keepalived软件最开始是转为负载均衡软件LVS而设计,用来管理和监控LVS集群系统中各个服务节点的状态,后来又加入了可实现高可用的VRRP功能.所以Keepali ...