【JSOI2016】炸彈攻擊2
枚舉每一個發射源,對于當前發射源\(S_k\),將激光塔和敵人按照到\(S_k\)的向量的極角序排序。
如果存在\(D_l\)在兩個激光塔\(T_i,T_j\)之間,且\(T_i,T_j\)的夾角小于\(\pi\),那么\((T_i,T_j,S_k,D_l)\)就是一組合法的四元組。
于是直接排序后雙指針,對于每一個激光塔\(T_i\)求出距離最遠的夾角不超過\(\pi\)的激光塔\(l_i\)在哪里,指針掃的過程中我們維護當前這個區間內的答案、激光塔數量、敵人數量;新增一個激光塔,對于當前區間內的每個敵人,能作為\(T_j\)的都多了一個,于是答案加上區間內敵人的數量;刪除一個敵人,那么對于區間內所有的激光塔,能作為\(D_l\)的都減少了一個,于是答案減去區間內激光塔的數量。
注意到按極角序排序后首位相接可能構成答案,于是將極角\(θ \in (0,-\pi]\)的激光塔變成\(2\pi+θ\)接在序列的后面即可。
時間復雜度\(O(n^2\log n)\)。代碼。

浙公網安備 33010602011771號