题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993

Problem Description
Consider a simple sequence which only contains positive integers as a1, a2 ... an, and a number k. Define ave(i,j) as the average value of the sub sequence ai ... aj, i<=j. Let’s calculate max(ave(i,j)), 1<=i<=j-k+1<=n.
 
Input
There multiple test cases in the input, each test case contains two lines.
The first line has two integers, N and k (k<=N<=10^5).
The second line has N integers, a1, a2 ... an. All numbers are ranged in [1, 2000].
 
Output
For every test case, output one single line contains a real number, which is mentioned in the description, accurate to 0.01.
 
题目大意:给n个数和k,求数的个数大于等于k的子段的最大平均值。
思路:可以去看IOI国家集训队论文:《浅谈数形结合思想在信息学竞赛中的应用》——周源
也可以直接看这个http://blog.sina.com.cn/s/blog_ad1f8960010174el.html
 
PS:这就是传说中的来自数据组数的恶意吗,看上去似乎有100组大数据的感觉……G++超时的可以尝试用C++交,HDU的C++读入比G++快,而且优化的程度也不同。
 
代码(C++ 500MS/G++ 906MS):
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 #include <algorithm>
 #include <cctype>
 using namespace std;
 typedef long long LL;

 ;

 int sum[MAXN];
 int n, k;

 int readint() {
     char c = getchar();
     while(!isdigit(c)) c = getchar();
     ;
      + c - ', c = getchar();
     return res;
 }

 struct Point {
     int x, y;
     Point() {}
     Point(int x, int y): x(x), y(y) {}
     Point operator - (const Point &rhs) const {
         return Point(x - rhs.x, y - rhs.y);
     }
     double slope() {
         return (double)y / x;
     }
 };

 LL cross(const Point &a, const Point &b) {
     return (LL)a.x * b.y - (LL)a.y * b.x;
 }

 LL cross(const Point &o, const Point &a, const Point &b) {
     return cross(a - o, b - o);
 }

 Point que[MAXN], p;
 int head, tail;

 double solve() {
     ;
     head = ; tail = -;
     for(int i = k; i <= n; ++i) {
         p = Point(i - k, sum[i - k]);
         ], que[tail], p) <= ) --tail;
         que[++tail] = p;

         p = Point(i, sum[i]);
         ], p) >= ) ++head;
         res = max(res, (p - que[head]).slope());
     }
     return res;
 }

 int main() {
     while(scanf("%d%d", &n, &k) != EOF) {
         ; i <= n; ++i) sum[i] = sum[i - ] + readint();
         printf("%.2f\n", solve());
     }
 }

HDU 2993 MAX Average Problem(斜率优化)的更多相关文章

  1. hdu 2993 MAX Average Problem(斜率DP入门题)

    题目链接:hdu 2993 MAX Average Problem 题意: 给一个长度为 n 的序列,找出长度 >= k 的平均值最大的连续子序列. 题解: 这题是论文的原题,请参照2004集训 ...

  2. HDU 2993 MAX Average Problem dp斜率优化

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. 数据结构:HDU 2993 MAX Average Problem

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. HDU 2993 MAX Average Problem(斜率优化DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2993 题目大意:给定一个长度为n(最长为10^5)的正整数序列,求出连续的最短为k的子序列平均值的最大 ...

  5. MAX Average Problem(斜率优化dp)

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. HDU 3045 Picnic Cows(斜率优化DP)

    Picnic Cows Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. hdu 3669 Cross the Wall(斜率优化DP)

    题目连接:hdu 3669 Cross the Wall 题意: 现在有一面无限大的墙,现在有n个人,每个人都能看成一个矩形,宽是w,高是h,现在这n个人要通过这面墙,现在只能让你挖k个洞,每个洞不能 ...

  8. HDU 3507 Print Article(斜率优化DP)

    题目链接 题意 : 一篇文章有n个单词,如果每行打印k个单词,那这行的花费是,问你怎么安排能够得到最小花费,输出最小花费. 思路 : 一开始想的简单了以为是背包,后来才知道是斜率优化DP,然后看了网上 ...

  9. HDU 3480 Division(斜率优化+二维DP)

    Division Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 999999/400000 K (Java/Others) Tota ...

随机推荐

  1. AutoMapper(六)

    返回总目录 List和数组 AutoMapper只要求元素类型的配置而不要求可能会用到的任何数组或者list类型.比如,我们有一个简单的源和目标类型: public class Source{ pub ...

  2. iOS and JAVA 的 RSA 加密解密 (转载整理 )

    参考原文地址:http://www.cnblogs.com/makemelike/articles/3802518.html (至于RSA的基本原理,大家可以看 阮一峰的网络日志 的 RSA算法原理( ...

  3. 1002. A+B for Polynomials

    1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...

  4. 您的应用静态链接到的 OpenSSL 版本有多个安全漏洞。建议您尽快更新 OpenSSL

    安全提醒 您的应用静态链接到的 OpenSSL 版本有多个安全漏洞.建议您尽快更新 OpenSSL. 在开头为 1.0.1h.1.0.0m和 0.9.8za的 OpenSSL 版本中这些漏洞已得到修复 ...

  5. Activiti 查询最新版本的流程定义

    package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io ...

  6. Windows技巧 - 右键菜单【在此处打开bash】

    实现效果如下图: 步骤如下:按住shift,在文件夹空白处(桌面也可以)鼠标右键,即可看到 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROO ...

  7. javascript 函数节流方法

    函数节流可以缓解调用的次数,代码如下: function throttle(method,delay){ var timer=null; return function(){ var context= ...

  8. 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系

    #[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 ![关系图解](http://images.cnitblog.com/blog/84 ...

  9. jpa动态创建EntityManagerFactory 态设置数据库连接 EntityManager;

    //jpa动态创建EntityManagerFactory 态设置数据库连接EntityManager;createEntityManagerFactory(String persistenceUni ...

  10. 使用DriverManager获取数据库连接的一个小改进

    由于使用DriverManager获取数据库连接时,由于DriverManager实现类中有一段静态代码块,可以直接注册驱动,且可以同时管理多个驱动程序 所以当换数据库连接时需要指定不同的数据库,那么 ...