題目描述
一組正整數,分別表示由正方體迭起的柱子的高度。若某高度值為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:
這道題主要是有乙個坑點,它的地勢可能是中間特別高,兩邊特別矮,這樣子我們直接用貪心是錯的,我們需要處理乙個細節:
我們找到最高的那個柱子,然後以這個柱子為中心,向左右兩邊擴充套件,也就是普通的貪心了
完整**:
#include
#include
#include
#define ii int
#define i 123456
#define r register
using
namespace
std;
ii be,en,n,now,ans;
ii h[i];
struct node aa[i];
bool map(node a1,node a2)
int main()
sort(aa+1,aa+n+1,map);
//找最高的柱子;
be=1;
en=n;
while (be<=en)
while (en>=be)
now=h[be];
for(r ii i=be;i<=aa[1].wei;i++)
be=en;
now=h[en];
for(r ii i=en;i>=aa[1].wei;i--)
cout
return
0;}
by atm;
歡迎指錯^_^;
end;
洛谷 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 積水面積
一組正整數,分別表示由正方體疊起的柱子的高度。若某高度值為 x 表示由 x 個正立方的方塊迭起 如下圖,0 x 5000 找出所有可能積水的地方 圖中藍色部分 統計它們可能積水的面積總和 計算的是圖中的橫截面積。乙個立方體的位置,為乙個單位面積 如圖 柱子高度變化為 0 1 0 2 1 2 0 0 ...