CF2004D Colored Portals 題解

Redamancy_Lydic發表於2024-08-16

背景

memset 害死人。

分析

首先注意到字母種類只有四個,那麼很顯然任意兩個城市至多隻需要一個城市中轉就能互相到達。

然後不就可以亂寫了麼。

先把可以直接到達的判斷掉,設當前兩個城市為 \(x\)\(y\),我們對 \(6\) 種字母組合分別存一下出現的位置,然後對 \(x\) 的兩個字母分別去找到對應的字母組合,並在相應的陣列裡面二分找到第一個比 \(x\) 靠後的位置,最後計算即可。

需要注意的是,如果當前字母組合在 \(x\) 之後一次也沒有出現過,我們就需要找到在 \(x\) 前面位置的再計算。

但是因為 \(x\) 可能從未出現過,這時候我們可以先對每一個陣列先存上一個極小值防止卡死。

然後就做完了。

Code

提交記錄