UvaLive-4726-Average
来源:互联网 发布:杭州编程培训课费 编辑:程序博客网 时间:2024/06/07 10:21
这个题的意思是说给你一个含有01的字符串,要求你求出一个至少长度为L的最大平均值序列,要求输出起点和终点。
本来打算用线段树做,后来看到树上有说用单调队列做,参考了某位神牛的解题报告~~
地址:http://blog.sina.com.cn/s/blog_77dc9e080101hkll.html
代码:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;const int maxn=10e5+10;char str[maxn];int q[maxn],sum[maxn];double dis(int a,int b){ return (sum[b]-sum[a])*1.0/(b-a);}int main(){ int T; scanf("%d",&T); while(T--) {int n,m;scanf("%d%d",&n,&m);scanf("%s",str+1);sum[0]=0;for(int i=1;i<=n;i++) sum[i]=sum[i-1]+str[i]-'0';int ansl=0,ansr=m;double ans=dis(0,m);int front=0,rear=-1,length=m;for(int i=m;i<=n;i++){ int ita=i-m; while(front<rear&&dis(q[rear],ita)<=dis(q[rear-1],ita))rear--; q[++rear]=ita; while(front<rear&&dis(q[front],i)<=dis(q[front+1],i))front++; double itb=dis(q[front],i); if(itb>ans) {ans=itb;ansl=q[front];ansr=i;length=i-q[front]; } else if(itb==ans&&length>i-q[front]) {ansl=q[front];ansr=i;length=i-q[front]; }}printf("%d %d\n",ansl+1,ansr); } return 0;}
- UvaLive-4726-Average
- UVALive 4726 Average(数形结合)
- UVALive 4726Average 单调队列+斜率优化
- UVALive - 4726 Average 数型结合
- UVALive - 4726 Average (斜率优化+单调队列)
- UVaLive LA 4726 UVa 1451 - Average (子序列最大平均数 数形结合 斜率优化 单调队列)
- average
- Average
- Average
- LA 4726 Average
- uvalive 4726(单调队列)
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- IDF2013
- HDU1052:Tian Ji -- The Horse Racing
- 数组提升
- 【Android开发学习37】android opengl es 2.0里surfaceview背景透明
- apache 1
- UvaLive-4726-Average
- OpenMP: 使用OpenMP优化程序
- 实例3.8
- hdu1575 快速幂
- 实例3.7
- C++中Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
- UIWebView清除缓存和cookie
- Heap与stack
- LocalStorageVolume