BZOJ 4302 Buildings 解題報告

2022-08-03 13:39:23 字數 992 閱讀 8024

這個題好像很有趣的樣子。

題目分析:

房間都是 $1\times k$ 的,也就是一條一條的。這個好像比較顯然的樣子。

乙個房間如果要覆蓋某個格仔$u$,那麼這個房間的面積至少為 $dis(u, boundry)$,即其到邊界的距離,這個好像也比較顯然的樣子。

於是答案至少是 $max\$,然後可以通過構造來取到最小值,即答案就是$max\$。

演算法流程:

特判:如果輸入的是乙個邊長為乙個奇數的正方形,且 $(x,y)$ 恰好是正方形的中心,那麼答案為 $\frac$。

初始化:因為答案至少是 $\lfloor\frac\rfloor$(考慮最中心的格仔),故令答案初始化為這個東西。

更新答案:然後我們只需要找 $(x,y)$ 旁邊的四個格仔,計算其到邊界的距離,然後和初始答案取最大值就是最終答案了。

一些細節:

列舉 $(x,y)$ 的相鄰的格仔的時候,要注意一下這個格仔是否合法。

怎麼計算 $dis(u, boundry)$ 呢?直接列舉拓展的方向,看要走多少步才能到達邊界,取其最小步數。

計算距離的時候要注意只能從三個方向拓展,有乙個方向會經過 $(x,y)$,是走不動的。

時間複雜度:$o(t)$,空間複雜度:$o(1)$。

1 #include 2 #include 3

using

namespace

std;45

const

int fx[4][2] = , , , };

6int

n, m, x, y;

78 inline int calc(int tx, int ty, intk)9

19return

min;20}

2122 inline int

solve()

2333

return

ans;34}

3536

intmain()

37

4302_gromah

hdu 4302 優先佇列

進一步學習了優先佇列的用法 題意 乙隻小動物在直線上走,起始位置為零,之後會出現食物,動物要去距離自己最短的食物那,若兩邊的食物距離相等,則選擇之前走的方向的食物 0 x,代表x的位置出現了食物,1代表去吃乙個食物 1 include2 include3 include4 include5 usin...

P4302 SCOI2003 字串摺疊

演算法 區間動態規劃 f i j f i j f i j 表示處理i到j i到ji到 j這段區間所需要的最小代價 兩種轉移方法 一.標準的區間dpdp dp的轉移f i j min f i j f i k f k 1 j f i j min f i j f i k f k 1 j f i j mi ...

洛谷 p4302的dp中的細節討論

本題的思路很簡單,區間dp即可,但做題不是為了ac,故我在此分享3種有細微差別但思路相同的做 法,以便後續遇到同型別題來選擇適合自己的方法。直接讀入字串,列舉的區間長度不包括起點 include include include include define inf 0x3f3f3f3f using ...