講講思路:
從雙向記錄兩邊到當前位置的最大的高度
設兩個陣列l[i],r[i],分別記錄從前往後和從後往前到i位置的最大高度
然後在每個位置加上其能夠裝的水的量,見公式sum+=min(l[i],r[i])-hi[i]
當前位置水能裝的最大高度減去下面磚的高度即為當前位置能裝的水。
上ac**:
#include
const
int maxn=
1e4+7;
using namespace std;
int n,hi[maxn]
,l[maxn]
,r[maxn]
,sum=0;
intmain()
for(
int i=n;i>
0;i--
) r[i]
=max
(r[i+1]
,hi[i]);
for(
int i=
1;i<=n;i++
)printf
("%d"
,sum)
;return0;
}
只不過這種低階題目我還做了這麼久,我真是太菜了。 洛谷 P1318 積水面積
一組正整數,分別表示由正方體迭起的柱子的高度。若某高度值為x,表示由x個正立方的方塊迭起 如下圖,0 x 5000 找出所有可能積水的地方 圖中藍色部分 統計它們可能積水的面積總和 計算的是圖中的橫截面積。乙個立方體的位置,為乙個單位面積 如圖 柱子高度變化為 0 1 0 2 1 2 0 0 2 0...
洛谷P1318 積水面積
一組正整數,分別表示由正方體疊起的柱子的高度。若某高度值為 x 表示由 x 個正立方的方塊迭起 如下圖,0 x 5000 找出所有可能積水的地方 圖中藍色部分 統計它們可能積水的面積總和 計算的是圖中的橫截面積。乙個立方體的位置,為乙個單位面積 如圖 柱子高度變化為 0 1 0 2 1 2 0 0 ...
洛谷 P1318 積水面積
將每層可積水的面積加起來 每層可積水的面積 左邊第乙個比他大右邊的所有空位 右邊第乙個比他大的左邊的所有空位 這一層的所有空位 他指當前高度 1 include2 using namespace std 3 define maxn 100000045 intn,h maxn tot,maxx 6in...