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. debug?用对拍!

    很多人考noip之类的比赛永远会发生一些奇怪的问题 比如说下面这两位(来自我的两位学长) sliver n:spli,考得怎样啊? spli:就那样啦,day1T1没推出来规律,别的还好 silver ...

  2. MySQL案例04:Cause: java.sql.SQLException: Could not retrieve transaction read-only status from server

    今天同事发现程序日志有异常抛出,询问原因,进过排查发现与java的连接参数有关系,具体处理过程如下: 一.错误信息 "message": "\n### Error upd ...

  3. Bootstrap03

    一.表单(以下示例 * 代表class) 注意:a.使用表单的关键字form b.所有的提示词使用label包裹 c.所写内容按div分类,使得层次分明 1.基本表单+表单组合+内联表单 *=form ...

  4. 基于Vue实现可以拖拽的树形表格(原创)

    因业务需求,需要一个树形表格,并且支持拖拽排序,任意未知插入,github搜了下,真不到合适的,大部分树形表格都没有拖拽功能,所以决定自己实现一个.这里分享一下实现过程,项目源代码请看github,插 ...

  5. MySQL数据库创建用户并实现远程登录

    创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 2.授权 GRANT privileges_name privileges O ...

  6. 轻松解决U盘加密问题

    很多小伙伴常常会遇到这样的问题,比如说有朋友或者同事想借用你的u盘,处于人情世故你又不得不借,但是又不喜欢自己的文件被别人看到或者担心丢失或被修改,在此提供一种给u盘加密或者给u盘里的文件加密的方法. ...

  7. Linux系统下连接校园网Drcom客户端教程(广东工业大学)

    这篇教程写给想要学习Linux系统或者在Linux系统下有需要使用Drcom上网的同学,在我疯狂踩坑,经过n多次的刷机装机实验,体验不同发行版本的linux系统后,终于懂得怎么连接上drcom,想想连 ...

  8. 4.26-python学习笔记(变量及命名、字符串、格式化字符串print,format,%...)

    参考书目:<Learn Python The Hard Way> cars=100 print('there are ',cars,'cars available.') ##练习5 更多变 ...

  9. python学习笔记(一):基础知识点

    defaultdict函数将所有值初始化为指定类型 from collections import defaultdict a = defaultdict(int) a[0] '' python按照引 ...

  10. zabbix-3.2.3安装

    环境:lapp 操作系统: rhel7.0apache: apache-2.4数据库: postgresql-9.2.10php: php-5.4.16-21zabbix: zabbix-3.2.3 ...