每次找到两边离中心最高的板,如果等,再找外围的最高版...
画图便于理解
两边先找到距离(-1,1)最近的最大值L和R,因为可能存在多个最高的挡板。
接着比较两个L和R的大小,相等的话分别分析两边,取最小值
注意L和R一边高的话两边都会流,所以这块的时间要乘2。
比如分析右边,从最外围开始,顶部画平行线往内部走,就发现分成了几个区间,加起来就可以了。
L,R不等的话,(这里出现了一个坑),高的那边可能有比低的那边高的其他边;然后又有一个坑,可能找到的边和低的那个边等高

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int N = ;
int l, r, x[N], y[N];
int L, R, idl, idr; void read() {
R = L = ;
for (int i = l; i <= r; i += ) {
if (i < ) {
scanf("%d", &x[(-i)/]);
if (L <= x[(-i)/]) {
L = x[(-i)/]; idl = (-i)/;
}
}
else {
scanf("%d", &y[i/]);
if (R < y[i/]) {
R = y[i/]; idr = i/;
}
}
}
return ;
} int solve() {
l = (-l) / ; r = r / ;
int tmp;
if (R == L) {
int k = , t = ;
tmp = x[l];
for (int i = l; i > idl; i--) {
k += tmp; tmp = max(tmp, x[i-]);
}
tmp = y[r];
for (int i = r; i > idr; i--) {
t += tmp; tmp = max(tmp, y[i-]);
} return (idl + idr + ) * R * + min(k, t) * * ;//*2*2因为要从中间分开流
} else {
int T = min(R, L);
int p = , q = , k = , t = ;
while (p < l && x[p] < T) p++;
while (q < r && y[q] < T) q++; if (R > L) {
tmp = y[q];
for (int i = q; y[i] <= L; i++) {
k += tmp; tmp = max(tmp, y[i+]);
}
tmp = x[l];
for (int i = l; i > p; i--) {
t += tmp; tmp = max(tmp, x[i-]);
} } else {
tmp = x[p];
for (int i = p; x[i] <= R; i++) {
k += tmp; tmp = max(tmp, x[i+]); //k是从另一边流(如果开始找到的边高度等于T),直到遇到高于T的
}
tmp = y[r];
for (int i = r; i > q; i--) {
t += tmp; tmp = max(tmp, y[i-]);
}
}
int ans = t> k ? t + k : * t; //t<k,说明确实要分开流,从T那边流走的时间;t>k,(总体积2*k+2*k+2*(t-k))
return ans * + (p + q + ) * T * ;
}
} int main() {
while (scanf("%d%d", &l, &r) == && l && r) {
read();
printf("%d\n", solve());
}
return ;
}

最新文章

  1. chrome扩展程序开发
  2. swift-懒加载
  3. CURL使用方法详解
  4. 前端面试题和setTimeout异步
  5. JavaScript高级程序设计(第三版)学习笔记6、7章
  6. UVa11419 SAM I AM(构造最小点覆盖)
  7. SpringBoot 配置文件 application.properties(二)
  8. PHP扩展开发(4) - 多类扩展
  9. 一个关于Integer的秘密
  10. Codeforces Round #261 (Div. 2)459D. Pashmak and Parmida&amp;#39;s problem(求逆序数对)
  11. Java并发之底层实现原理学习笔记
  12. 深入讨论channel timeout
  13. DDD领域驱动设计理论篇 - 学习笔记
  14. VMware: Non-VI workload detected on the datastore
  15. 在 Ubuntu 16.04上安装 vsFTPd
  16. android studio 开发经常使用快捷键使用分享
  17. android 使用lint + studio ,排查客户端无用string,drawable,layout资源
  18. 循环while 和 continue
  19. IIS7的网站通过https访问提示ssl_error_rx_record_too_long
  20. Cookie简单实例

热门文章

  1. codevs1148传球游戏
  2. Centos7 编译安装 Nginx、MariaDB、PHP
  3. UVa 11584 Partitioning by Palindromes (简单DP)
  4. git apply failed (转载)
  5. 容器云未来:Kubernetes、Istio 和 Knative
  6. 关于&lt;?php exit;?&gt;&quot;的绕过问题
  7. sql server编写一个语句脚本自动清空各表数据以初始化数据库
  8. AssetDatabase文档翻译
  9. 高级开发不得不懂的Redis Cluster数据分片机制
  10. 线段树(单点更新) HDU 1754 I Hate It