HDU 2993 MAX Average Problem (斜率优化)
2015-07-30 10:51
483 查看
论文上的题,不懂自行搜索周源论文《浅谈数形结合思想在信息学竞赛中的应用》
这个题单独scanf读数据就超时,已经没法AC了,自己会了就行。
代码:
这个题单独scanf读数据就超时,已经没法AC了,自己会了就行。
代码:
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<algorithm> using namespace std; const int MAXN=100010; double sum[MAXN]; int a[MAXN]; int q[MAXN]; int head,tail; double max(double a,double b) { if(a>b)return a; else return b; } double getUP(int i,int j)//i>j { return sum[i]-sum[j]; } int getDOWN(int i,int j) { return i-j; } int input() { char ch=' '; while(ch<'0'||ch>'9')ch=getchar(); int x=0; while(ch<='9'&&ch>='0')x=x*10+ch-'0',ch=getchar(); return x; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n,k; while(scanf("%d%d",&n,&k)!=EOF) { sum[0]=0; for(int i=1;i<=n;i++) { // scanf("%d",&a[i]); a[i]=input(); sum[i]=sum[i-1]+a[i]; } head=tail=0; q[tail++]=0; double ans=0; for(int i=k;i<=n;i++) { while(head+1<tail&&getUP(i,q[head])*getDOWN(i,q[head+1])<=getUP(i,q[head+1])*getDOWN(i,q[head])) head++; ans=max(ans,getUP(i,q[head])/getDOWN(i,q[head])); int j=i-k+1; while(head+1<tail&&getUP(j,q[tail-1])*getDOWN(q[tail-1],q[tail-2])<=getUP(q[tail-1],q[tail-2])*getDOWN(j,q[tail-1])) tail--; q[tail++]=j; } printf("%.2lf\n",ans); } return 0; }
相关文章推荐
- 二进制法构造子集
- poj 2709 混合颜料
- solr5.2.1环境搭建
- centos 7 安装开源数据统计piwik
- DexClassLoader的使用
- 字符串分割成多行数据(oracle函数)
- inline-block 空隙
- JAVA Swt初识 分类: Java 2015-07-30 10:51 22人阅读 评论(0) 收藏
- Select For update语句浅析
- 关于如何在matlab中添加新的工具箱的整理
- Struts 2国际化
- UITableView介绍
- Map遍历的方法总结
- 坚果云
- iOS开发系列--视图切换
- 数组和链表的区别
- windwos 8三大版本的区别
- [转载]typedef struct和struct的区别
- hdu1305 字典树
- 网络编程Socket它TCP它TIME_WAIT国家具体解释