洛谷P1318 積水面積

2022-05-01 00:48:15 字數 1036 閱讀 2394

一組正整數,分別表示由正方體疊起的柱子的高度。若某高度值為\(x\),表示由\(x\)個正立方的方塊迭起(如下圖,\(0<=x<=5000\))。找出所有可能積水的地方(圖中藍色部分),統計它們可能積水的面積總和(計算的是圖中的橫截面積。乙個立方體的位置,為乙個單位面積)。

如圖:柱子高度變化為 0 1 0 2 1 2 0 0 2 0

圖中藍色部分為積水面積,共有\(6\)個單位面積積水。

輸入格式:

兩行,第一行n,表示有n個數(\(3<=n<=10000\))。第2行連續n個數表示依次由正方體迭起的高度,保證首尾為\(0\)。

輸出格式:

乙個數,可能積水的面積。

輸入樣例#1:

10

0 1 0 2 1 2 0 0 2 0

輸出樣例#1:

6
思路:挺水的一道題,但是第一遍寫還是錯了,我以為是今年noip t1,然而想錯了,沒認真讀題,這個題其實就是看看乙個位置的左右高度有不有差值,有的話就加上這個差值。

**:

#include#include#define maxn 10001

using namespace std;

int n,l[maxn],r[maxn],a[maxn],ans;

int main()

for(int i=n;i>=1;--i) r[i]=max(r[i+1],a[i]);

for(int i=1;i<=n;++i)

if(min(l[i],r[i])-a[i]>0) ans+=min(l[i],r[i])-a[i];

printf("%d\n",ans);

return 0;

}

洛谷 P1318 積水面積

一組正整數,分別表示由正方體迭起的柱子的高度。若某高度值為x,表示由x個正立方的方塊迭起 如下圖,0 x 5000 找出所有可能積水的地方 圖中藍色部分 統計它們可能積水的面積總和 計算的是圖中的橫截面積。乙個立方體的位置,為乙個單位面積 如圖 柱子高度變化為 0 1 0 2 1 2 0 0 2 0...

洛谷P1318積水面積

講講思路 從雙向記錄兩邊到當前位置的最大的高度 設兩個陣列l i r i 分別記錄從前往後和從後往前到i位置的最大高度 然後在每個位置加上其能夠裝的水的量,見公式sum min l i r i hi i 當前位置水能裝的最大高度減去下面磚的高度即為當前位置能裝的水。上ac include const...

洛谷 P1318 積水面積

將每層可積水的面積加起來 每層可積水的面積 左邊第乙個比他大右邊的所有空位 右邊第乙個比他大的左邊的所有空位 這一層的所有空位 他指當前高度 1 include2 using namespace std 3 define maxn 100000045 intn,h maxn tot,maxx 6in...