怠惰の累積和

技術/競プロ/怪文書/虚無

技術室奥プログラミングコンテスト#3 F - 天使とふすま

 

問題概要

1ヵ所に集まっているN個の襖を隙間も重複も無いように並べる。1個の襖を動かすには動かす距離をyとしてB[i]*y消費する。この時、条件を満たす並べ方にするまでの体力消費量の最小値を求める。

beta.atcoder.jp

 

解法

2つの数値が1つの物に与えられているときはその2つの数値をどうにかしてsortするのが定石な気がするので頑張ってみる。すると、襖の並びは左からA[i]/B[i]の数値が大きい物ほど左にありそうという気持ちになるので、pair<double,pair<int,int>>で数値を管理してあげて、doubleの所にA[i]/B[i]を入れてあげてsortした後に愚直に計算してあげて、AC。sortがネックなのでO(NlogN)。

beta.atcoder.jp