題意:
現有一塊n * m的地,每塊1*1的地的高度為 h i, j,在n * m的土地之外的土地高度均為0(即你可以認為最外圈無法積水)
現在下了一場足夠大的雨,試求出這塊地總共積了多少單位體積的水
思路:
先說說我的錯誤思路,一開始的我思路是列舉每個點的四周是否都比自身,是就提公升到自身四周最低的那個高度,這個思路錯誤在……還是看樣例說話吧
3 3 3 3
3 0 0 3
3 0 0 3
3 3 3 3
按照我的思路這道題為積水為0,所以hack
新思路:
我們可以把四周的點全部存進優先佇列,並標記,每次把高度最小的出列,每個點走一次,然後判斷這個點四周有沒有比它更矮的點,有就積水到一樣的高度,然後標記進隊,因為每次都是高度最小的優先,所以維護積水不會溢位
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1e3+5;
int mp[n]
[n];
bool vis[n]
[n];
int dir[4]
[2]=
;struct node};
intmain()
);}}
} ll ans=0;
while
(que.
size()
) que.
push
(node);
}}}/*
for(int i=1;i<=n;i++)
佇列Q 牛客
記錄我的魚唇時間到了。開兩個陣列乙個記錄 frist,另乙個記錄 last,然後輸出。果斷掛了,因為同乙個數可以操作多次,所以還需要記錄每個數的位置!include define ll long long define p pair define pp pair define pb push bac...
優先佇列 牛客 HNOI2003 作業系統
題目鏈結 題意 有n個命令,給定每個命令的 序號,最早開始時間 到達時間 需要持續的時間,優先順序 某一時刻,當有多個命令都可以被解決時,優先選擇優先順序大的,如果優先順序一樣,優先選擇最早開始時間早的執行 輸出 n個命令被完成的時間 按被完成的從早到晚排序 思路 每到乙個命令的開始時間,就把這個命...
牛客 雙端佇列
有 個整數需要排序,能用的工具是若干個雙端佇列。需要依次處理這n個數,可以 考慮排完後的序列,它是由若干雙端佇列組成。發現 對於每個雙端佇列,每個元素換成它在原有序列中的位置,一定是乙個先單調減後單調增的序列。但要討論相同的情況 發現 存在一種最優解,滿足相同的元素在同乙個雙端佇列中 include...