日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

算法题:水洼有多少(C++)

發(fā)布時間:2025/4/16 c/c++ 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法题:水洼有多少(C++) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:
輸入一串?dāng)?shù)字,表示這一段空間的各個點的高低
然后,算出來,在這樣的情況下,下雨后(保證雨很大,就是說,如果能形成積水,那就一定會形成)
如:
0 1 2 3
是不會形成積水的;
1 0 2
這樣是可以形成積水的,量是1;
(想象一個柱狀圖)
我們會輸出積水的量 ,而這個就是要算出來的東西

給一組測試數(shù)據(jù)

4
10
0 1 2 1 0 1 3 2 0 1
3
10 1 9
4
4 3 1 2
輸出的結(jié)果:
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;} }

總結(jié)

以上是生活随笔為你收集整理的算法题:水洼有多少(C++)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。