深信服9.10笔试,积水那题什么意思

  • 第1题A了18.18
  • 什么意思,求解释
#深信服##笔试题目#
全部评论
应该是100,100-4,100-3,100-4,100-5,100-3,100求中间积水量。等做完才发现,
点赞 回复 分享
发布于 2020-09-10 18:58
leetcode 接雨水变形体,leetcode原题数组首部插入一个数组中最大值,就是这道题了。
1 回复 分享
发布于 2020-09-10 19:35
积水问题 class Solution { public: int shui(int L,int W,vector<int> arr) { vector<int> gaodu; for (int a : arr) { gaodu.push_back(10 - a); } for (int a : gaodu) { cout << a << " "; } vector<int> gaodu1(gaodu); gaodu.push_back(0); vector<int> shuimian; for (int i=gaodu.size()-1;i>0;--i)  { shuimian.push_back(max(gaodu[i], gaodu[i - 1])); gaodu[i - 1] = max(gaodu[i], gaodu[i - 1]); } reverse(shuimian.begin(), shuimian.end()); for (int a:shuimian) { cout << a << " "; } int sz = shuimian.size() - 1; int shui = 0; while (sz>=0) { shui = shui + (shuimian[sz] - gaodu1[sz])*W; sz--; } return shui; } }; int main() { int W, L; cin >> W >> L; vector<int> arr; for (int i=0;i<L;++i) { int tmp; cin >> tmp; arr.push_back(tmp); } Solution S; int jishui; jishui = S.shui(L, W, arr); cout << endl; cout << jishui << endl; system("pause"); return 0; }
1 回复 分享
发布于 2020-09-10 22:09
int main() { int W, L; cin >> W; cin >> L; vector<int> H; while (L) { int a; cin >> a; a = 100 - a; H.push_back(a); L--; } int max=H[H.size()-1]; int sum = 0; int base = 1 * 1 * W; for (int i = H.size() - 2; i >= 0; i--) { if (H[i] >= max) { max = H[i]; } else { sum = sum + base * (max - H[i]); } } cout << sum << endl; }
1 回复 分享
发布于 2020-09-10 22:39
我只a了27,我觉得是深度,4-3 4-3 5-3
点赞 回复 分享
发布于 2020-09-10 18:41
我理解:测量是从上向下测,水是从左往右流,因此按照测例来说:因为最深是5,所以把石块高度转换为:1 2 1 0 2 ,然后1左边应该有墙,所以第一个1还能圈住1的水,加上中间2102圈住3,加起来就是4,再乘以宽度(面向测例理解😂)
点赞 回复 分享
发布于 2020-09-10 19:34
我醉了,死活算不出那个测试用例给的数值
点赞 回复 分享
发布于 2020-09-10 19:45
第二题写出来了吗
点赞 回复 分享
发布于 2020-09-10 20:01
我是先把测量深度换算成高度,用100去减。然后倒着dp,算每格后面的最高点。然后每格积水就是最高点减去当格高数乘以宽度。累加每格积水输出。
点赞 回复 分享
发布于 2020-09-10 21:32
题目的意思是水流从左往右流,水沟左边是水库且有水,水沟右边没水。 暴力求解:迭代找右侧剩余水沟的最高木块,每次计算当前最高木块与上一轮最高木块之间的储水,迭代终止条件为最高木块位置等于水沟最右端。
点赞 回复 分享
发布于 2020-09-11 09:45

相关推荐

我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务