背景
memset
害死人。
分析
首先注意到字母種類只有四個,那麼很顯然任意兩個城市至多隻需要一個城市中轉就能互相到達。
然後不就可以亂寫了麼。
先把可以直接到達的判斷掉,設當前兩個城市為 \(x\) 和 \(y\),我們對 \(6\) 種字母組合分別存一下出現的位置,然後對 \(x\) 的兩個字母分別去找到對應的字母組合,並在相應的陣列裡面二分找到第一個比 \(x\) 靠後的位置,最後計算即可。
需要注意的是,如果當前字母組合在 \(x\) 之後一次也沒有出現過,我們就需要找到在 \(x\) 前面位置的再計算。
但是因為 \(x\) 可能從未出現過,這時候我們可以先對每一個陣列先存上一個極小值防止卡死。
然後就做完了。
Code
提交記錄