HDU 2993 MAX Average Problem (数形结合) #by Plato
来源:互联网 发布:基金技术分析软件 编辑:程序博客网 时间:2024/04/29 17:34
http://acm.hdu.edu.cn/showproblem.php?pid=2993
题意:给你一段长度为n的数列, 求其长度不小于 K 的平均值最大的子串。
解析参考:http://blog.ac521.org/?p=565
大意是先将问题转化为求斜率的问题,然后将朴素的N^2的算法用下凸曲线维护(要推导一些性质),降为2N的复杂度
数形结合
#include <cstdio>#include <iostream>#include <fstream>#include <cstring>using namespace std;int N,K;int sum[100010];struct point{ double x,y;};void read(int & a){ char ch; while (ch = getchar(),ch < '0' || ch > '9'); a = ch - '0'; while (ch = getchar(),ch >= '0' && ch <= '9') a = a*10 + ch - '0';}double solve(){ double maxx = 0; static point s[100010]; int head = 1,tail = 0; for (int j = K; j <= N; j++) { int k = j - K; while (tail-1 >= head && (s[tail].x - s[tail-1].x)*(sum[k] - s[tail].y) - (s[tail].y - s[tail-1].y)*(k - s[tail].x)<0)//if (tail-1 >= head) { tail --; } s[++tail].x = k; s[tail].y = sum[k]; while (head+1 <= tail && (sum[j] - s[head].y)/(j - s[head].x) < (sum[j] - s[head+1].y)/(j - s[head+1].x)) head++; double temp = (double)(sum[j] - s[head].y)/(j - s[head].x); //cout<<temp<<endl; if (temp > maxx) maxx = temp; } return maxx;}int main(){ freopen("test.txt","r",stdin); while(~scanf("%d%d",&N,&K)) { sum[0] = 0; for (int i = 1; i <= N; i++) { read(sum[i]); sum[i] += sum[i-1]; } printf("%.2lf\n",solve()); } return 0;}
- HDU 2993 MAX Average Problem (数形结合) #by Plato
- HDU 数形结合 2993 MAX Average Problem
- hdu 2993 MAX Average Problem
- hdu 2993 MAX Average Problem
- HDU 2993 MAX Average Problem
- HDU 2993 MAX Average Problem
- HDU 2993 MAX Average Problem
- 【HDU 2993】MAX Average Problem
- hdu 2993 MAX Average Problem
- HDU 4258 Covered Walkway (DP +数形结合)#by Plato 终于A出来了~~~~~
- HDU 2993 MAX Average Problem 斜率优化
- HDU 2993 MAX Average Problem (斜率优化)
- hdu 2993 MAX Average Problem(斜率dp)
- HDU 3045 MAX Average Problem
- HDU 2993 MAX Average Problem【斜率优化dp】
- hdu 2993 MAX Average Problem(DP+斜率优化入门题)
- HDU 2993 MAX Average Problem(斜率优化DP)
- hdu 2993 MAX Average Problem(DP+斜率优化)
- 成长,没你想象的那么迫切!
- JAVA反射
- javascript基础
- java ArrayList 和 LinkedList的区别
- 晨枫U盘维护工具的ISOLINUX模式可加载磁盘映像的探索及USB-ROM引导后安装系统的相关问题
- HDU 2993 MAX Average Problem (数形结合) #by Plato
- ROLLUP与CUBE运算符
- ROLLUP 与 CUBE 运算符的使用
- undefined reference to dlopen, dlclose, dlsym and
- sybase代理表的创建。
- SQL server 数据导入导出BCP工具使用详解
- ORA-01034 和 ORA-27101错误
- 一个合格的程序员应该读的30本书
- sencha touch2中panel如何绑定tap事件