博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
紫书 习题 8-24 UVa 10366 (构造法)
阅读量:6705 次
发布时间:2019-06-25

本文共 1382 字,大约阅读时间需要 4 分钟。

又是一道非常复杂的构造法……

#include
#include
#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 1123;int L, R, LHs[MAXN], RHs[MAXN], LH, RH, LHi, RHi;int solve(){ int lt = 0, rt = 0, t; for(int i = L, h = LHs[L]; i > LHi; i--) //从最高隔板到边缘的时间 lt += h, h = max(h, LHs[i-1]); for(int i = R, h = RHs[R]; i > RHi; i--) rt += h, h = max(h, RHs[i-1]); if(LH == RH) return (LHi + RHi + 1) * LH + min(lt, rt) * 2; //小细节, 矩形宽要加1, 拿样例算一下就知道了 int T = min(LH, RH), LTi = 0, RTi = 0; while(LTi < L && LHs[LTi] < T) LTi++; while(RTi < R && RHs[RTi] < T) RTi++; if(LH < RH) { rt = 0; for(int i = RTi, h = T; RHs[i] <= T; i++) rt += h, h = max(RHs[i+1], h); t = lt > rt ? (lt + rt) : 2 * lt; } if(LH > RH) { lt = 0; for(int i = LTi, h = T; LHs[i] <= T; i++) lt += h, h = max(LHs[i+1], h); t = rt > lt ? (lt + rt) : 2 * rt; } return t + (RTi + LTi + 1) * T;}int main(){ int lx, rx; while(scanf("%d%d", &lx, &rx) && lx && rx) { LH = RH = 0; L = (-lx) / 2, R = rx / 2; for(int i = lx; i < 0; i += 2) { int j = (-i) / 2; scanf("%d", &LHs[j]); if(LH <= LHs[j]) LH = LHs[j], LHi = j; } for(int i = 1; i <= rx; i += 2) { int j = i / 2; scanf("%d", &RHs[j]); if(RH < RHs[j]) RH = RHs[j], RHi = j; } printf("%d\n", solve() * 2); //开始除以2, 后来乘回去 } return 0; }

转载于:https://www.cnblogs.com/sugewud/p/9819554.html

你可能感兴趣的文章
2. 使用指针操作数组
查看>>
innodb_flush_log_at_trx_commit理解
查看>>
DHCP安装授权
查看>>
7个关于网络方面的面试问题和答案
查看>>
关于ibatis 的 like的诡异问题
查看>>
我的友情链接
查看>>
zabbix安装配置
查看>>
K8s Ingress 模式简介及示例
查看>>
Hubs & Repeaters
查看>>
选择http协议还是tcp协议
查看>>
我的友情链接
查看>>
SNBannerView 无限循环滚动轮播图 集成简单 高效
查看>>
Yii框架官方指南系列25——使用数据库:Active Record
查看>>
Android:ANR、线程间通讯、Handler、Message
查看>>
抽象工厂模式实现DB的封装(续)
查看>>
linux命令之git
查看>>
SQLPlus环境设置
查看>>
如何解决crontab脚本执行sudo
查看>>
大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
查看>>
phalcon的nginx重写实现模仿apache下的.htaccess
查看>>