---
# System prepended metadata

title: ABC 413
tags: [題解, ABC]

---

# AtCoder Beginner Contest 413
Unofficial Editorial
~~為了減少製作成本~~，以下不會幫你翻譯題目，也不會有實作的 code (因為我覺得要自己想過然後用自己的方式實做出來比較好，不要直接抄)。
如果想看 code ，可以去 submission 找，應該有更多實作比我好看的。
### A
(●'◡'●)
### B
:::spoiler 觀察
$N<=100$
$S_i<=10$
:::
:::spoiler 實作
暴力枚舉 $i$、$j$，把連起來的字串丟到 `set` 裡面
:::
### C
:::spoiler 觀察 1
很明顯是 `queue` 的操作，~~題目名字就有講了~~
:::
:::spoiler 觀察 2
type 1 的數字最多可能被複製 $1e9$ 次
不能暴力，不然會拿到 TLE + MLE
:::
:::spoiler 實作
開 `queue` ，裡面放 `pair` ，存 `{數字, 複製幾次}`
type 2 要拿 $k$ 個數字出來的時候，就先看 `queue` 的 `front` 那個數字夠不夠多，不夠就扣掉再繼續拿
:::
### D
:::spoiler 觀察 1
若公比是 1 或 -1，全部數字絕對值會一樣
公比是 -1 的話還要數負號是否是 $\lceil \frac{n}{2} \rceil$ 個或是 $\lfloor \frac{n}{2} \rfloor$ 個
:::
:::spoiler 觀察 2
若公比不是 1 或 -1 ，按照絕對值大小排序就可以判斷了 (公比是負的的話正負號會交錯出現)
:::
:::spoiler 觀察 2 的判斷方法
若 ${a_1, a_2, a_3}$ 是等比，那 $a_2 \times a_2 = a_1 \times a_3$
記得開 `long long`
:::
:::spoiler WA ?
$n=2$ 答案一定是 ||Yes||
:::
:::spoiler 複雜度
$O(nlogn)$ (因為要排序)
:::
### E
:::spoiler 觀察 1
陣列大小是 2 的冪次，操作也是 2 的冪次
畫圖 ?
:::
:::spoiler 觀察 2
![2025-07-07 22 35 12](https://hackmd.io/_uploads/Hky3o8FSlx.png)
要在同一個框框裡面才能 reverse
:::
:::spoiler 實作
遞迴，如果右子樹第一個元素比左子樹第一個元素小，就交換左子樹和右子樹，使整個樹的字典序盡可能小
![2025-07-07 22 37 11](https://hackmd.io/_uploads/S1xMTiUFSxg.png)
:::
:::spoiler 複雜度
$O(nlogn)$
令 $n$ 表示陣列大小，樹的深度就是 $logn$
:::
### F
:::spoiler 觀察 1
如果沒有~~討厭的~~ Aoki 擋路，可以把全部的 goal 丟到 `queue` 裡面然後 BFS
:::
:::spoiler 觀察 2
對於一個答案未知的空格，如果他相鄰的格子有兩格以上是 goal，那不管 Aoki 擋哪邊，他都可以在 1 步內走到
推廣 ?
:::
:::spoiler 觀察 2 的推廣
對於一個答案未知的空格，如果他相鄰的格子有兩格答案被算出來了，他的答案就會是那兩格中答案比較大的再 $+1$ (因為 Aoki 會不讓你走步數比較少的那邊)
:::
:::spoiler 實作
BFS
:::
:::spoiler 複雜度
$O(HW)$，$H$ 和 $W$ 是長和寬
:::
### G
:::spoiler 觀察 1
$H, W<=2e5$ 不能直接 BFS
:::
:::spoiler 觀察 2
障礙最多只有 $2e5$ 個
可以從障礙物下手，怎樣會沒辦法走到
:::
:::spoiler 觀察 3
![2025-07-07 15 15 55](https://hackmd.io/_uploads/HJ4BNlKrel.png)
1. 同時碰到上面和下面
2. 同時碰到左邊和右邊
3. 同時碰到右邊和下面
4. 同時碰到上面和左邊
:::
:::spoiler 實作
對於一大塊連通的障礙物，若滿足上圖任一個條件就會把人和星星分開
DFS、BFS、DSU 都可以
這邊的連通是指||八個方向||
:::
:::spoiler 複雜度
$O(klogk)$ (因為 DFS 的時候用 `map` 存障礙物位置)
:::