用水填坑 (牛客)優先佇列

2021-09-13 16:57:18 字數 919 閱讀 7182

題意:

現有一塊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...