栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3694 Arrangement

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3694 Arrangement

#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>using namespace std;#define LL long longconst int maxn = 100005;const LL maxint = 1LL<<60;const double eps = 1e-5;int n,m,L,R;double a[maxn];double v[maxn];double dp[maxn][15];double sum[maxn];int q[maxn];int dblcmp(double a,double b){ if (fabs(a-b) < eps) return 0; return a < b ? -1 : 1;}double solve(double mid){ sum[0] = 0; for (int i=1;i<=n;i++) sum[i] = sum[i-1] + 1.0*a[i] - mid; for (int i=0;i<=n;i++) for (int j=0;j<=m;j++) dp[i][j] = -maxint; for (int i=0;i<=n;i++) dp[i][0] = 0; for (int j=1;j<=m;j++) { int head = 0 , tail = 0; for (int i=j;i<=n;i++) { while (head < tail && i - q[head] > R) head++; int k = i - L; if (k >= 0) { while (head < tail && dblcmp(dp[q[tail-1]][j-1] - sum[q[tail-1]] , dp[k][j-1] - sum[k]) <= 0) tail--; q[tail++] = k; } dp[i][j] = dp[i-1][j]; if (head < tail) dp[i][j] = max(dp[i][j],dp[q[head]][j-1] + sum[i] - sum[q[head]]); } } return dp[n][m];}int main(){ while (scanf("%d%d%d%d",&n,&m,&L,&R)!=EOF) { double l = 1e30, r = -1e30; for (int i=1;i<=n;i++) { scanf("%lf",&a[i]); r = max(r,a[i]); l = min(l,a[i]); } bool flag = false; while (dblcmp(l,r) <= 0) { double mid = (l+r)/2.0; if (dblcmp(solve(mid),0) >= 0) { flag = true; l = mid + eps; } else r = mid - eps; } if (!flag) puts("-1"); else printf("%.2fn",floor(l*100)/100.0); } return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号