2019深信服校招笔试题——木板接水

题目:

空地上竖立着n个从左到右排列的木板,它们可以把水挡住,但溢出最边上木板的水将会流到空地上。已知木板间距都是单位1,现给定每个木板的高度,请求出总共能接住的水量?说明一点,这里只考虑间距(宽度)和高度,不考虑第三个维度,因此水量是平方单位。

示例1,木板高度分别是2,1,3,那么我们可以接住2*2=4平方单位的水,如下图所示。注意,中间那个木板被水淹没了。

示例2,木板高度分别是2,4,3,那么可以接住2*

1+3*1=5平方单位的水,如下图所示。

思路:不断降低所有木板高度 (如图)

(1) 先找到左右两端木板高度的较小值minHeight=min(ivec[0],ivec[size-1]) (ivec中存放排列的木板高度),求出这部分容量volume=(size-1)*miniHeight;

(2) 将所有木板长度减去minHeight,得到新的排列木板序列,定义两个指针low、high,分别从左右开始遍历数组ivec,找到左右两端第一个高度大于0的木板,此时minHeight=min(ivec[low],ivec[high]), volume=(high-low)*minHeight;故总共能接住的总量sum += volume;(每次容量相加)

(3) 重复步骤2,直至木板序列中只有一块木板高度大于0或全部木板高度均小于0,则此时sum为最大容量。

#include

#include

#include

using namespace std;

void sub(vector &ivec, int &height)

{

for (auto &m : ivec)

m -= height;

}

int getVolume(vector &ivec, int &low, int &high, int &height)

{

int size = ivec.size();

int volume = 0;

for (; low < size; low++)

{

if (ivec[low]>0)

break;

}

for (; high >= 0; high--)

{

if (ivec[high]>0)

break;

}

if (low < size && high < size)

{

height = min(ivec[high], ivec[low]);

volume = (high - low)*height;

}

return volume;

}

int main()

{

int t;

cin >> t;

while (t--)

{

int n;

cin >> n;

vector ivec(n, 0);

for (auto &m : ivec)

cin >> m;

int sum = 0;

int size = ivec.size();

int low = 0;

int high = size - 1;

int height = min(ivec[low], ivec[high]);

int volume = getVolume(ivec, low, high, height);

while (low < size && high < size && ivec[low] > 0 && ivec[high] > 0)

{

sum += volume;

sub(ivec, height);

volume = getVolume(ivec, low, high, height);

}

cout << sum << endl;

}

return 0;

}

深信服笔试题 php,2019深信服校招笔试题------木板接水相关推荐

  1. html5 笔试题 选择题,2019拼多多前端笔试题

    选择.填空题: 1.IP地址,子网掩码的计算 2.Internet网络层重要协议 3.http请求方法 4.HTML中a标签的伪类 5.alert(undefined==null)的输出结果 6.ht ...

  2. 【机试题】2019大疆嵌入式笔试题A卷(附超详细解答)

    前不久的大疆嵌入式线上笔试,可能是因为最近只是在做毕设项目,还没有来得及认真系统复习,直接崩了.就凭借着记忆,把一些记得住的笔试题分享一下,作下记录. 整个大疆嵌入式线上笔试,分为选择题(单选题.多选 ...

  3. 2019 小红书校招笔试题字符串压缩算法

    时间限制:1秒 空间限制:32768K 1 2 3 4 输入一串字符,请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串. 例如: aac 压缩为 1ac xxxxy ...

  4. oppo安卓面试题,万字Android技术类校招面试题汇总,GitHub标星3.2K

    一.开始的开始 **Android框架体系架构(高级UI+FrameWork源码)**这块知识是现今使用者最多的,我们称之Android2013~2016年的技术,但是,即使是这样的技术,Androi ...

  5. 深信服C++开发岗校招笔试题-笔试经历

    今天做了深信服的笔试题,题目比较基础,考的知识点比较细,编程题也不难.在此总结下: 选择题都是不定项,但是有几道明显是单选,涉及到位运算知识(考了&=.~=还有|=,我后来查了下好像没有~=这 ...

  6. sdn 深信服_推动物联网安全行业发展,青莲云受邀出席2019深信服创新大会

    近日,以"畅想"为主题的2019深信服创新大会在深圳举办,本次大会由深信服科技.IDC 联合主办,是一场围绕着数字化创新技术的IT盛会,2000余位各行业IT管理者和深信服的合作伙 ...

  7. 2019深信服笔试 —— 猎人抓兔子

    2019深信服笔试 -- 猎人抓兔子 题目描述: 假设兔子有n个排成一排的洞,编号为1和n.兔子每天晚上跳到相邻的一个洞里住,而猎人每天白天检查其中的一个洞.猎人告诉你每天检查的洞的编号,希望你分析一 ...

  8. 2019深信服校招——木板接水

    2019深信服校招--木板接水 题目描述 空地上竖立着n个从左到右排列的木板,它们可以把水挡住,但溢出最边上木板的水将会流到空地上.已知木板间距都是单位1,现给定每个木板的高度,请求出总共能接住的水量 ...

  9. 百度2019校招笔试题

    百度2019校招笔试题 1. 探险安排 小明要为n个人计划一次火星的探险,其中一个重要的任务是为每个参与者安排食物.仓库里面有m个能用一天的食物包裹,每个食物包裹有不同的类型ai.每个人每天必须用且只 ...

最新文章

  1. svn在linux上的安装
  2. 微软研究院开源编程语言Verona,借鉴Rust、Cyclone等特性
  3. 《数学之美》第13章 Google AK-47的设计者—阿米特.辛格博士
  4. 虚拟机生命周期八招巧管理
  5. 如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(一)
  6. 【car】几款电动代步车参数
  7. vsFTPD编译安装使用实用手册
  8. JAVA中的字符串操作
  9. Excel完成将多行多列数据转化为一列
  10. CNN发展历史【从LeNet到DenseNet】
  11. linux部署3proxy源码,在CentOS 7系统中从源码安装RTPProxy的方法
  12. 当今年轻人创业,什么行业最有前途
  13. 【stanford】梯度、梯度下降,随机梯度下降
  14. Jasmine基础API
  15. (附源码)计算机毕业设计Java远程健康数据管理系统
  16. C++通信录管理系统
  17. 第二届BJD CTF做题总结与题目复现-MISCCrypto
  18. Springboot项目配置404错误页面
  19. CSS3:clip-path详解
  20. 服务器多开系统,服务器多开虚拟机操作系统

热门文章

  1. Docker容器间的网络通信
  2. javaweb JAVA JSP聊天室程序源码(局域网聊天系统 即时通讯)网页聊天系统
  3. pyTorch下载和cuda下载以及学习笔记
  4. 计算机网络管理入门(一)
  5. sketchup自学教程_su草图大师快捷键与如何渲染
  6. 网络安全就业有什么要求?可算来了,给大家了解一下网络安全就业篇学习大纲
  7. FPGA开发流程简介
  8. meteor Template
  9. c++完成端口网络编程
  10. 3D可视化集装箱货柜模型开发 --threejs