Intense Heat(前缀和或尺取)
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(前缀和或尺取)的更多相关文章
- Lecture Sleep(尺取+前缀和)
Description 你的朋友Mishka和你参加一个微积分讲座.讲座持续n分钟.讲师在第i分钟讲述ai个定理. 米什卡真的对微积分很感兴趣,尽管在演讲的所有时间都很难保持清醒.给你一个米什卡行 ...
- poj2566尺取变形
Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronaut ...
- POJ3061 Subsequence 尺取or二分
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...
- 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 ...
- POJ:2566-Bound Found(尺取变形好题)
Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5408 Accepted: 1735 Special J ...
- 2018亚洲区预选赛北京赛站网络赛 D.80 Days 尺取
题面 题意:你带着K元要去n个城市,这n个城市是环形的,你可以选择任意一个起点,然后顺时针走,对于每个城市,到达时可以获得a元,但是从这里离开又需要花费b元,问你能否找到一个起点(输出花钱最少的那个) ...
- POJ-3061 Subsequence 二分或尺取
题面 题意:给你一个长度为n(n<100000)的数组,让你找到一个最短的连续子序列,使得子序列的和>=m (m<1e9) 题解: 1 显然我们我们可以二分答案,然后利用前缀和判断 ...
- Gym 101257G:24(尺取)
http://codeforces.com/gym/101257/problem/GGym 101257G 题意:给出n个人,和一个数s,接下来给出每个人当前的分数和输掉的概率.当一个人输了之后就会掉 ...
- Codeforces - 1191E - Tokitsukaze and Duel - 博弈论 - 尺取
https://codeforc.es/contest/1191/problem/E 参考自:http://www.mamicode.com/info-detail-2726030.html 和官方题 ...
随机推荐
- JQuery简单总结(思维导图)
- JSP声明和JSP指令
JSP声明 JSP 声明用来定义程序中使用的实体,如变量.方法和类. 语法格式:<%! 变量/方法/类的声明 %> 例如: <%! String str="欢迎&quo ...
- PhpStorm中实现代码自动换行
方法一: 随便打开一个页面,在显示行号(最左边)这里鼠标右击,勾选"Use Soft Wraps". 方法二: 选择"File-->>Settings--&g ...
- Redis数据库 : 基础
设置密码: /etc/redis/redis.conf 文件把 requirepass 取消注释并设置密码 取消只能本地登录的bind 同上面的配置文件 把 bind一行注释掉 带密码登录: redi ...
- python获取网页编码问题(encoding和apparent_encoding)
在requests获取网页的编码格式时,有两种方式,而结果也不同,通常用apparent_encoding更合适 注:推荐一个大佬写的关于获取网页编码格式以及requests中text()和conte ...
- leetcode记录-组合两个表
表1: Person +-------------+---------+ | 列名 | 类型 | +-------------+---------+ | PersonId | int | | Firs ...
- VC6无法生成Release版本程序
在工程设置,将Setting for后面的选项改为Win32 Release.然后重新编译.结果仍然没有生成release,而且打开设置时,依然是Win32 Debug. 解决办法,在VC6.0的工具 ...
- 课上实践练习——MySort
模拟实现Linux下Sort -t : -k 2的功能.参考 Sort的实现.提交码云链接和代码运行截图. Linux下Sort -t : -k 2的功能 sort的工作原理: sort将文件的每一行 ...
- nohub用法
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/my ...
- day3 直方图
1.绘制直方图 # coding=utf-8 import cv2 import numpy as np from matplotlib import pyplot as plt img1 = cv2 ...