UVA 1451 Average(斜率优化)
2016-10-14 22:59
423 查看
题解紫书第八章例题8。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x) const int maxn=100000+10; int f[maxn],q[maxn]; char s[maxn]; int n,L; int compare_average(int x1,int x2,int x3,int x4) {return (f[x2]-f[x1-1])*(x4-x3+1)-(f[x4]-f[x3-1])*(x2-x1+1);} int main() { int kase; ss(kase); while(kase--) { ss(n);ss(L); scanf("%s",s+1); f[0]=0; rep(i,1,n) f[i]=f[i-1]+s[i]-'0'; int i=0,j=0,ansL=0,ansR=L; rep(t,L,n) { while(j-i>1&&compare_average(q[j-2],t-L,q[j-1],t-L)>=0) j--;//先放进队列里,然后再调整跳出队列。 q[j++]=t-L+1; while(j-i>1&&compare_average(q[i],t,q[i+1],t)<=0) i++; int c=compare_average(q[i],t,ansL,ansR); if(c>0||(c==0&&t-q[i]<ansR-ansL)){ ansL=q[i],ansR=t; } } printf("%d %d\n",ansL,ansR); } return 0; }
相关文章推荐
- UVa 1451 Average - 斜率优化
- UVa 1451 Average 解题报告(斜率优化)
- UVA 1451 Average 斜率优化
- UVa 1451 Average——斜率优化
- Average UVA - 1451 斜率优化
- UVaLive LA 4726 UVa 1451 - Average (子序列最大平均数 数形结合 斜率优化 单调队列)
- UVA 1451 Average平均值 (数形结合,斜率优化)
- 斜率优化,数形结合(Average,uva 1451)
- UVa 1451 Average (斜率优化)
- UVALive 4726 Average 单调队列+斜率优化
- UVA - 1451 Average 单调队列 (数形结合-更新最大斜率)
- UVALive - 4726 Average (斜率优化+单调队列)
- POJ 2018 Best Cow Fences + UVA Live 4726 Average 斜率优化DP
- UVA 12524 Arranging Heaps 动态规划 斜率优化
- 例题8-9 平均值(Average, Seoul 2009, UVa1451)
- UVA 12594 Naming Babies (斜率优化DP)
- 【DP+斜率优化】 hdu2993 MAX Average Problem
- Average(uva 1451)
- HDU 2993 MAX Average Problem(斜率优化)
- HDU2993——MAX Average Problem(斜率优化DP)