算法题:水洼有多少(C++)
生活随笔
收集整理的這篇文章主要介紹了
算法题:水洼有多少(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
輸入一串數字,表示這一段空間的各個點的高低
然后,算出來,在這樣的情況下,下雨后(保證雨很大,就是說,如果能形成積水,那就一定會形成)
如:
0 1 2 3
是不會形成積水的;
1 0 2
這樣是可以形成積水的,量是1;
(想象一個柱狀圖)
我們會輸出積水的量 ,而這個就是要算出來的東西
給一組測試數據
4
10
0 1 2 1 0 1 3 2 0 1
3
10 1 9
4
4 3 1 2
輸出的結果:
5
8
1
代碼如下:
#include <iostream> #include <algorithm> using namespace std;int main(){int time;cin>>time;while (time--){int n, t;cin >> n;int *a = new int [n];for (int i = 0; i < n; ++i) {cin >> a[i];}int sum = 0;bool first = true;for (int i = 0; i < n;) {//find hillif (a[i] == 0 || i == n){i++;} else if (first) {//This one is a hillfirst = false;int j = i+1, temp = 0;for (; j < n-1; ++j) {if (a[j] > a[j -1] && a[j] > a[j + 1]) {// find another hillbreak;}temp += a[j];}if (j == n - 1 && a[i + 1] >= a[j]){temp -= a[i + 1];sum += (min(a[i + 1], a[j]) * (j - i - 2) - temp);} else {sum += (min(a[i], a[j]) * (j - i - 1) - temp);}i = j; //refresh the hill} else {int j = i+1, temp = 0;for (; j < n-1; ++j) {if (a[j] > a[j -1] && a[j] > a[j + 1]) {// find another hillbreak;}temp += a[j]; }if (j == n - 1 && a[i + 1] >= a[j]){temp -= a[i+1];sum += (min(a[i + 1], a[j]) * (j - i - 2) - temp);} else {sum += (min(a[i], a[j]) * (j - i - 1) - temp);}i = j; //refresh the hill}}cout << sum << endl;delete a;} }總結
以上是生活随笔為你收集整理的算法题:水洼有多少(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDF5数据处理(一)python
- 下一篇: 栈的逆转(递归实现)