# AA 競程 2023 TOI 模擬賽 決賽 --- * 賽前難易度猜測 $E ≈ A < C < D < B$ * 實際每題 AC 人數(包含同步賽) A:12 人 B:0 人 C:16 人 D:6 人 E:12 人 --- E. 這是 TOI 會考的普通題嗎? 首殺:Fysty (47 mins) ---- #### <font color="##0f0">子題 1</font> * n 對情侶坐成一圈的方法總共有:$2 \times 9! \times 2^9$,直接枚舉所有方案的話,大概會超時。 ---- * 但是每對情侶若確定坐哪兩個位置時,我們可以貪心的決定誰左誰右會比較好。 * 所以枚舉的情況剩下 $9!$ 種。 ---- #### <font color="##0f0">子題 2 & 3</font> * 不妨假設情侶坐的位置是 $2i-1$ 和 $2i$。 * 把每個人當圖論上的點,情侶間連一條邊,$a_{2i-1}$ 和 $a_{2i}$ 也連一條邊 * 可發現此圖是由很多環組成,且長度為 2 的環上兩人都可獲得自己想要的餐具。而其餘長度為 2k 的環,至多能有 k 個人坐在自己喜歡的餐具前,並且方案有兩種。 * 每個環各自判斷哪種方案字典序最小,即可 $O(N)$ 解出此題。 ---- * 若只拿到子題 2 的分數,大概是你陣列開太小了。 --- A. TOI 也會出搜索題? 首殺:hank55663 (16 mins) ---- #### <font color="##0f0">子題 1</font> * ~~為了迎合題目敘述,雖然不知道怎麼估時間複雜度~~,但出題者有測試過,寫了個暴力搜索枚舉所有合法的可能 cycle 就通過所有測試資料了 ---- #### <font color="##0f0">子題 2</font> * 先把原有的 '#' 上下左右都標記為不能走 方法一: * 接著找到兩個留下來的 path 頭尾端,用 BFS 找他們間合法路徑的最短路,一定滿足環自身沒有在不該相鄰的地方相鄰 ---- 方法二: * 接著找到兩個留下來的 path 頭尾兩端,從其中一端使用 DFS,過程中只走不會和兩步以前走過的地方相鄰的格子,並且不要走已拜訪過的格子,有辦法證明若存在解,最終一定能走到另外一端 --- C. TOI 也會出 IMO 題? 首殺:PixelCat (44 mins) ---- ---- #### <font color="##0f0">子題 1</font> * 首先呢,$(x1,y1),(x2,y2),(x3,y3)$ 三個點構成的三角形的重心為 $(\frac{x1+x2+x3}{3},\frac{y1+y2+y3}{3})$ ---- * 算出重心後套範例測試資料的海龍公式即可 AC 此子題 ---- #### <font color="##0f0">子題 2</font> * 會算重心座標的話,可直接套用 [CSES2191 Polygon Area](https://cses.fi/problemset/task/2191) 的解法解此子題 * 算簡單多邊形的面積可利用 [Shoelace formula](https://en.wikipedia.org/wiki/Shoelace_formula)(中文似乎被稱作鞋帶定理) ---- #### <font color="##0f0">子題 3</font> * 請參考題目附圖,可以證明 $\triangle p_1C_1C_2$ 面積是 $\triangle p_1m_2m_3$ 的面積的 $\frac{4}{9}$ * 所以每個詢問其實都是 $p_i$ 以及沒和 $p_i$ 相鄰的邊的中點所形成的凸多邊形面積的 $\frac{4}{9}$,可發現在計算鞋帶定理時,共通的項非常多,不用重新計算。 * 時間複雜度為 $O(n)$ --- D. TOI 也會出構造題? 首殺:8e7 (81 mins) ---- #### <font color="##0f0">子題 1</font> * 觀察一:每一列黑格是連續的,只需維護左右界 * 觀察二:每一列的黑格左界是先遞減在遞增,右界是先遞增再遞減 ---- 只要暴力枚舉遞迴枚舉所有可能情況可以,有辦法計算出在 $\max(N,M) \le 8$ 的情況下,滿足上頁兩個觀察的不同黑格塗色方式並不多。 ---- #### <font color="##0f0">子題 2</font> * 使用 DP,令 $dp[i][l][r][dec][inc]$ 代表現在考慮到第 $i$ 列,且第 $i$ 列黑格左界是 $l$,右界是 $r$,$dec$ 是個布林值代表黑格左界是否正在遞減,$inc$ 是個布林值代表黑格右界是否在遞增。 * 如此一來就有個 $O(N^5)$ 的 dp 作法 ---- #### <font color="##0f0">子題 3</font> * 子題 2 的轉移使用噁心的二維 RMQ 優化大概能變成 $O(n^3 log n)$ * 歡迎大家提供優美的作法 ---- #### <font color="##0f0">子題 4</font> * 引理:假設 $i < j < k$ 且 row $i,k$ 都至少有一個黑格,定義 $row\_ma_i$ 為第 $i$ row 的黑格最大的 column 座標 那麼 $row\_ma_j \ge \min(row\_ma_i, row\_ma_k)$ * 根據此引理可以 $O(n)$ 找出每個 row 的最大 coumn 座標至少有多大,最小的 column 座標至少有多小也能用類似方法求出 ---- * 例如左邊的測試資料,考慮完上頁的情況後,我們會得到右邊的 `#` 是一定要有黑格的位置 ```txt 11 13 #............ #............ ..#.......... .##.......... .#........... .##.......... ............. ............. .....#....... ...###....... ...#..#...... ...####...... .....#....... .....##...... ............. ............. ............. ............. ..........#.. .........##.. .........#.#. .........###. ``` ---- * 可能會有數個連通塊,但每個連通塊的 x 和 y 座標必單調遞增或遞減 * 不妨假設 這些連通塊座標 x 和 y 是同時遞增,並把連通塊編號為 $1 \sim k$,考慮每個連通塊的最小包矩形,每個編號 $2 \sim k$ 的連通塊最小包矩形左上角一定是黑格;每個編號 $1 \sim k-1$ 的連通塊最小包矩形右下角一定是黑格 * 把編號 $i$ 的連通塊 右下角和編號 $i+1$ 的連通塊左上角以任意最短路連接,就會是最佳解 ---- * 第三張圖的 `X` 展示一種可能的連接所有連通塊的方式 ```txt 11 13 #............ #............ #............ ..#.......... .##.......... X##.......... .#........... .##.......... .##.......... ............. ............. ..XX......... .....#....... ...###....... ...###....... ...#..#...... ...####...... ...####...... .....#....... .....##...... .....##XXX... ............. ............. .........X... ............. ............. .........X... ..........#.. .........##.. .........##.. .........#.#. .........###. .........###. ``` --- B. TOI 也會出字串題? 首殺:可惜此題沒人 AC :( ~~賽後 alvingogo 把賽中的 code 做常數優化後就 AC 了(但時限是標程 3 倍,應該不算卡常唷) ~~ ---- #### <font color="##0f0">子題 1</font> * 暴力枚舉每個詢問的所有路徑求最小的字串即可通過 ---- #### <font color="##0f0">子題 2 & 3</font> 此題在考驗大家用正確的順序 DP 要搞清楚一件事: * 令 $s1, s2$ 是字串,$c$ 是字元 * $s1$ 字典序 < $s2$ 不代表 $s1+c$ < $s2+c$ * 例如:$s1=$ `a`,$s2=$`aa`,$c=$`b` ---- * 引理:點 x 到點 y 的字典序最小路徑一定是 x 走恰一條邊至某個點 i,再從點 i 走字典序最小路至點 y * 請不要覺得這件事很顯然, 若把它改成:「點 x 到點 y 的字典序最小路徑一定是 x 走字典序最小路到某個點 i,再從點 i 走恰一條邊至 y」就是錯的 ---- * dp[i][j] 代表點 i 至點 j 路徑上字典序最小字串,根據引裡可列出轉移式: $dp[i][j] = \min\limits_{k=i+1}^j{s_i[k-j-1]+dp[k][j]}$ * 此作法時間複雜度為 $O(N^4)$ ---- #### <font color="##0f0">子題 4</font> * 對於所有的詢問,$ed_i$ 值相同 (令其為 $t$) 的答案可用 $O(N^2)$ 的時間算出 * 只要用 $x$ 從大到小的順序依序計算出 $x$ 至 $t$ 的字典序最小最短路,此最短路不需要儲存整個字串,只需要儲存離開 $x$ 第一個走到的點是哪個點即可。 ---- * 「只需要儲存離開 $x$ 第一個走到的點」是因為我們可以維護一個 list 按照字典序大小排列所有編號大於 $x$ 的點到 $t$ 的字典序最小路。 * 要比較第一個走到的點是誰比較好,只要比較第一個字母以及走到的點在 list 裡的順序即可。 * 可用 $O(N)$ 時間插入新的點到 list 裡。 ---- * 若用一些高級的平衡樹資料結構,邊數非 $O(N^2)$ 時能做到更好的時間複雜度
{"metaMigratedAt":"2023-06-17T21:55:06.559Z","metaMigratedFrom":"YAML","title":"AA 競程 2023 TOI 模擬賽 決賽","breaks":true,"slideOptions":"{\"transition\":\"fade\",\"parallaxBackgroundImage\":\"https://i.imgur.com/jtMhsLP.png\",\"parallaxBackgroundHorizontal\":200,\"parallaxBackgroundVertical\":200}","contributors":"[{\"id\":\"ec58fb73-fce8-4e38-b318-d00e84653449\",\"add\":5377,\"del\":481}]"}
    593 views
   owned this note