1. 程式人生 > 其它 >【做題記錄】CF1045G AI robots

【做題記錄】CF1045G AI robots

  • \(\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\) 為關鍵字排序。

然後記得將位置離散化一下。