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

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. const int N = ;
  8. int l, r, x[N], y[N];
  9. int L, R, idl, idr;
  10.  
  11. void read() {
  12. R = L = ;
  13. for (int i = l; i <= r; i += ) {
  14. if (i < ) {
  15. scanf("%d", &x[(-i)/]);
  16. if (L <= x[(-i)/]) {
  17. L = x[(-i)/]; idl = (-i)/;
  18. }
  19. }
  20. else {
  21. scanf("%d", &y[i/]);
  22. if (R < y[i/]) {
  23. R = y[i/]; idr = i/;
  24. }
  25. }
  26. }
  27. return ;
  28. }
  29.  
  30. int solve() {
  31. l = (-l) / ; r = r / ;
  32. int tmp;
  33. if (R == L) {
  34. int k = , t = ;
  35. tmp = x[l];
  36. for (int i = l; i > idl; i--) {
  37. k += tmp; tmp = max(tmp, x[i-]);
  38. }
  39. tmp = y[r];
  40. for (int i = r; i > idr; i--) {
  41. t += tmp; tmp = max(tmp, y[i-]);
  42. }
  43.  
  44. return (idl + idr + ) * R * + min(k, t) * * ;//*2*2因为要从中间分开流
  45. } else {
  46. int T = min(R, L);
  47. int p = , q = , k = , t = ;
  48. while (p < l && x[p] < T) p++;
  49. while (q < r && y[q] < T) q++;
  50.  
  51. if (R > L) {
  52. tmp = y[q];
  53. for (int i = q; y[i] <= L; i++) {
  54. k += tmp; tmp = max(tmp, y[i+]);
  55. }
  56. tmp = x[l];
  57. for (int i = l; i > p; i--) {
  58. t += tmp; tmp = max(tmp, x[i-]);
  59. }
  60.  
  61. } else {
  62. tmp = x[p];
  63. for (int i = p; x[i] <= R; i++) {
  64. k += tmp; tmp = max(tmp, x[i+]); //k是从另一边流(如果开始找到的边高度等于T),直到遇到高于T的
  65. }
  66. tmp = y[r];
  67. for (int i = r; i > q; i--) {
  68. t += tmp; tmp = max(tmp, y[i-]);
  69. }
  70. }
  71. int ans = t> k ? t + k : * t; //t<k,说明确实要分开流,从T那边流走的时间;t>k,(总体积2*k+2*k+2*(t-k))
  72. return ans * + (p + q + ) * T * ;
  73. }
  74. }
  75.  
  76. int main() {
  77. while (scanf("%d%d", &l, &r) == && l && r) {
  78. read();
  79. printf("%d\n", solve());
  80. }
  81. return ;
  82. }

uva10366 Faucet Flow的更多相关文章

  1. uva 10366 Faucet Flow

    题意: 给出l和r,然后从l坐标到r坐标每隔两个位置有一个档板,给出挡板的高度,然后想(-1, 1)中间加水,问什么时候会溢出. 分析: 两边先找到距离(-1,1)最近的最大值L和R.接着比较两个L和 ...

  2. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  3. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  4. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  5. [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流

    Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...

  6. BZOJ 4390: [Usaco2015 dec]Max Flow

    4390: [Usaco2015 dec]Max Flow Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 113[Submi ...

  7. ArcGIS制作放射状流向地图(Radial Flow Map)

    流向地图火了,因为Facebook的那张著名的友邻图,抑或因为<数据可视化之美>中介绍飞行模式的航线图,总之,流向地图以它特殊的可视化形式,直观地展示事物之间的联系,尤其在展示网络流向.贸 ...

  8. SSIS Data Flow优化

    一,数据流设计优化 数据流有两个特性:流和在内存缓冲区中处理数据,根据数据流的这两个特性,对数据流进行优化. 1,流,同时对数据进行提取,转换和加载操作 流,就是在source提取数据时,转换组件处理 ...

  9. Data Flow的Error Output

    一,在Data Flow Task中,对于Error Row的处理通过Error Output Tab配置的. 1,操作失败的类型:Error(Conversion) 和 Truncation. 2, ...

随机推荐

  1. bzoj 2836 魔法树 —— 树链剖分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2836 树链剖分裸题: 写码五分钟,调码两小时,RE不断,狂交二十五遍,终于找到一处小细节—— ...

  2. 洛谷P3354 [IOI2005]Riv 河流——“承诺”DP

    题目:https://www.luogu.org/problemnew/show/P3354 状态中要记录一个“承诺”,只需相同承诺之间相互转移即可: 然后就是树形DP的套路了. 代码如下: #inc ...

  3. bzoj1017 [JSOI2008]魔兽地图DotR——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 好难想的状态啊!f[i][j][k]表示i号物品有j个向上贡献,一共花了k钱的最大力量 ...

  4. Codechef WEASELSC

    WEASELSC code 给定一个高度图 a[1..n] ,要求你减少图中一些地方的高度,使得得到的图是一个不超过 K 级的楼梯,要求楼梯的面积最大(即得到的图中所有位置的高度之和最大). 这题题面 ...

  5. juju入门

    https://jujucharms.com/docs/1.25/config-LXC Installation(Ubuntu) #sudo add-apt-repository ppa:juju/s ...

  6. Ubuntu安装eclipse以及创建快捷方式

    1. 安装jdk,我用的1.8,很简单这里不详细说了: 2.下载eclipse的安装包, https://www.eclipse.org/downloads/download.php?file=/te ...

  7. 鸟哥私房菜基础篇:认识与学习BASH习题

    猫宁!!! 参考链接:http://linux.vbird.org/linux_basic/0320bash.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-在 Linux 上可以找到哪些 s ...

  8. LuoguP1370 Charlie的云笔记序列 【dp】By cellur925

    题目传送门 题目大意:给你一个序列,求出它所有区间的本质不同的子序列个数.(空序列也算作本质不同),数据范围$1e5$. 我们肯定是不能一个个枚举区间的...而且这个复杂度下,也就大概$O(n)$或$ ...

  9. iOS NSUserDefaults [setValue:forKey:] [setObject:forKey:] <Objc> setValue(_,forKey:) set(_,forKey) <Swift 3>

    前者其实是NSObject都可以调用的KVC方法,后者才是NSUserDefaults的实例方法: 这里参数的类型是nullable id,但是我建议你在传null的时候慎重考虑,否则你的应用就可能面 ...

  10. iOS 优雅地隐藏导航栏NavigationBar (Objc)

    @interface FSViewController () <UINavigationControllerDelegate> @end @implementation FSViewCon ...