AcWing 152 城市遊戲

2022-05-07 14:48:07 字數 1670 閱讀 3966

有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。

這片土地被分成n*m個格仔,每個格仔裡寫著』r』或者』f』,r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。

現在freda要在這裡賣萌。。。它要找一塊矩形土地,要求這片土地都標著』f』並且面積最大。

但是rainbow和freda的oi水平都弱爆了,找不出這塊土地,而藍兔也想看freda賣萌(她顯然是不會程式設計的……),所以它們決定,如果你找到的土地面積為s,它們將給你3*s兩銀子。

輸入格式

第一行包括兩個整數n,m,表示矩形土地有n行m列。

接下來n行,每行m個用空格隔開的字元』f』或』r』,描述了矩形土地。

每行末尾沒有多餘空格。

輸出格式

輸出乙個整數,表示你能得到多少銀子,即(3*最大』f』矩形土地面積)的值。

資料範圍

1≤n,m≤1000

輸入樣例:

5 6

r f f f f f

f f f f f f

r r r f f f

f f f f f f

f f f f f f

輸出樣例:
45

這題第一眼看起來可以用暴力,但是資料量大時,tle就在所難免。
這時我們來分析題。
1.要組成最大的矩陣。且只由f構成。
2.組成矩陣,每個f要連續。
所以感覺是不是像最大直方圖的面積問題呢。
這個時候我們可以,先統計從第一行到每一行,連續的矩陣個數。記住時連續且包含該行也要是f。
所以可以得出下一行的數量h[i][j] = h[i-1][j] + 1, 如果當前行不是f,則h[i][j] = 0;

然後問題變成列舉每一行,求出最大直方圖問題。
**:

#include #include #include using

namespace std;

const

int n = 1010;

int h[n][n];//儲存f的數量

char g[n][n];

int s[n], w[n];//s為棧,w時寬度

int n, m;

int work(int a)

s[++p] = a[i], w[p] = width + 1;}}

return ans;

}int main()

int ans = 0;

for(int i = 1; i <= n; ++ i) ans = max(ans, work(h[i]));//列舉每一行

cout << ans * 3 << endl;

return 0;

}

單調棧 Acwing 152 城市遊戲

152 城市遊戲 有一天,小貓rainbow和freda來到了湘西張家界的天門山玉蟾宮,玉蟾宮宮主藍兔盛情地款待了它們,並賜予它們一片土地。這片土地被分成n m個格仔,每個格仔裡寫著 r 或者 f r代表這塊土地被賜予了rainbow,f代表這塊土地被賜予了freda。現在freda要在這裡賣萌。它...

152 城市遊戲 AcWing

原題鏈結 求最大矩形面積我們可以聯想到那道經典的單調棧例題,因為這道題的n m都不是很大,所以我們可以用o n 2 的演算法。列舉每一行,將每一行以及上面的矩形都看成直方圖,即把每列f的個數當作那道題的陰影部分的高度,然後我們在每一行求它的左右最遠距離,那麼這道題就和那道經典題沒有任何區別 1 in...

ACWing 667 遊戲時間

讀入兩個整數a aa和b bb,表示遊戲的開始和結束時間,以小時為單位。計算遊戲持續時間。已知遊戲可以在一天開始,在另一天結束,最長持續24 2424 小時。輸入格式 共一行,包含兩個整數a aa和bbb。輸出格式 輸出格式為o jogo durou x hora s 其中x xx為遊戲持續時間。資...