公式

F - Charge 解説 by blackyuki


全ての給水機を空にすることは可能か?という判定問題を解くことを考えます。(類題:https://atcoder.jp/contests/abc214/tasks/abc214_e

時間 \([0,1],[1,2],[2,3],\ldots,[10^9-1,10^9]\) の順に、それぞれをどの給水機に割り当てるかを決めていきます。利用可能な、空でない給水機が複数ある場合は \(T_i\) の最も小さいものを選ぶことが最適です。適切に座標圧縮をすることで、\(O(N \log N)\) で上の判定問題を解くことができます。

元の問題に戻ります。実は、\(B_i\) の降順に、給水機を利用する時間の長さを貪欲に決めてもよいです。時間の長さを二分探索し、すでに利用する時間の長さを決めた給水機と合わせて上の判定問題を解くことで、その給水機を利用できる最大の時間の長さを求めることが可能です。

以上から、時刻の最大値を \(M\) として \(O(N^2 \log N \log M)\) でこの問題が解けました。時間の長さを二分探索する必要はなく、\(O(N^2 \log N)\) で解くことも可能です。

投稿日時:
最終更新: