HackerRank--Equal Stacks
2017-04-11 12:46
274 查看
HackerRank–Equal Stacks
题目描述
有三个栈,每个栈里放了一些高度不一的圆柱体,问如何从最上面拿走任意数量的圆柱体使三个栈的高度一致,最大可以得到的高度是多少?// 因为栈为空也视为高度一致,所以一定有解。
分析
只需要计算出每一个圆柱体处的当前总高度,即求一个前缀和代替之前的单独的高度值。每次比较两个栈,把较高的顶部的圆柱体拿掉(退栈),直到使两个栈等高,重复该操作使 height_1 = height_2= height_3 即可。
然后要注意题目里给的圆柱体高度是从上到下的,输入的时候需要反过来。
实现
#include <queue> #include <vector> #include <iostream> using namespace std; int equalize_stack(vector<int>& a, vector<int>& b) { if (a.empty()) { while (!b.empty()) b.pop_back(); return 0; } if (b.empty()) { while (!a.empty()) a.pop_back(); return 0; } while (!a.empty() || !b.empty()) { int al = a.empty() ? 0 : a[a.size()-1]; int bl = b.empty() ? 0 : b[b.size()-1]; if (al > bl) { a.pop_back(); } else if (al < bl) { b.pop_back(); } else { return al; } } return 0; } int main(){ int n1; int n2; int n3; cin >> n1 >> n2 >> n3; vector<int> h1(n1); for(int h1_i = n1-1; h1_i >= 0; h1_i--){ cin >> h1[h1_i]; } for (int i = 0; i < n1; i++) { h1[i] += i ? h1[i - 1] : 0; // cout << h1[i] << ' '; } vector<int> h2(n2); for(int h2_i = n2-1; h2_i >= 0; h2_i--){ cin >> h2[h2_i]; } for (int i = 0; i < n2; ++i) { h2[i] += i ? h2[i - 1] : 0; // cout << h2[i] << ' '; } vector<int> h3(n3); for(int h3_i = n3-1;h3_i >= 0; h3_i--){ cin >> h3[h3_i]; } for (int i = 0; i < n3; ++i) { h3[i] += i ? h3[i - 1] : 0; // cout << h3[i] << ' '; } int al = equalize_stack(h1, h2); int bl = equalize_stack(h2, h3); while (al != bl) { al = equalize_stack(h1, h2); bl = equalize_stack(h2, h3); } cout << al << endl; return 0; }
相关文章推荐
- 【HackerRank】Maximizing XOR
- [hackerrank]John and GCD list
- *[hackerrank]Algorithmic Crush
- Hackerrank && Insertion Sort - Part 1
- Hackerrank && Network
- HackerRank - Common Child
- HackerRank - Xoring Ninja
- HackerRank# Fibonacci Modified
- HackerRank - "String Transmission"
- HackerRank - "Red John is Back"
- HackerRank "AND xor OR"
- HackerRank "New Year Chaos"
- [Hackerrank] The Coin Change Problem
- HackerRank: Bricks Game
- [hackerrank]Fibonacci Modified
- Hackerrank SG 函数小结
- 【Hacker Rank】06.Loops
- Hackerrank Random Number Generator
- [hackerrank random]
- HackerRank - gcd-matrix