【做題記錄】CF1045G AI robots
阿新 • • 發佈:2022-01-08
-
\(\text{CF1045G AI robots}\)
- 演算法:cdq分治
題目:
火星上有 \(n\) 個機器人排成一行,第 \(i\) 個機器人的位置為 \(x_{i}\),視野為 \(s_{i}\),智商為 \(q_{i}\)。我們認為第 \(i\) 個機器人可以看到的位置是 \([x_{i}-s_{i},x_{i}+s_{i}]\)。
如果一對機器人相互可以看到,且它們的智商 \(q_{i}\) 的差距不大於 \(k\),那麼它們會開始聊天。
為了防止它們吵起來,請計算有多少對機器人可能會聊天。
\(n\le 10^5,0\le k\le 20\)。
題解:
考慮一對機器人能互相交流的限制:
若 \((i,j)\) 這對機器人能交流,不妨欽定 \(x_i<x_j\),則當且僅當
\[x_i+s_i\ge x_j-s_j,|q_i-q_j|\le k \]那麼這顯然是個三維偏序問題。
發現 \(x_i+s_i\ge x_j-s_j\) 這個限制涉及兩個元素,考慮將 \(s\) 從大到小排序,那麼可以保證若右邊的機器人能看見左邊的機器人,則左邊的必然也能看見右邊的。
然後因為 \(k\) 是定量,所以第二維就是以 \(q\) 為關鍵字排序。
然後記得將位置離散化一下。