Problem
Link: 1442 - Cav
Solution
Use greedy algorithm to deal with this problem.
Adjust the height of ceiling to fit the requirements.
Here is the code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <iostream> #include <cstdio> using namespace std;
const int maxn = 1e6+5; int cas, n, cnt; int ceiling[maxn], floor[maxn];
int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> cas; while(cas--) { cnt = 0; cin >> n; for (int i = 0; i < n; ++i) cin >> floor[i]; for (int i = 0; i < n; ++i) cin >> ceiling[i]; int tmp = maxn; for (int i = 0; i < n; ++i) { tmp = min(tmp, ceiling[i]); tmp = max(tmp, floor[i]); ceiling[i] = tmp; } tmp = maxn; for (int i = n-1; i > -1; --i) { tmp = min(tmp, ceiling[i]); tmp = max(tmp, floor[i]); ceiling[i] = tmp; cnt += ceiling[i] - floor[i]; } cout << cnt << '\n'; } return 0; }
|