アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC437C - Reindeer and Sleigh 2

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

全パターンを探索すると明らかにTLE。
よって高速化が必要になる。

重さW1で力P1のトナカイ1と重さW2で力P2のトナカイ2、どちらかをソリに乗せることを考える。
トナカイ1を下ろしてトナカイ2を乗せると、重さがW2-W1増加して、力がP1-P2増加する。
したがって、(P1-P2)-(W2-W1)>0なら、この入れ替えはするだけ得、=0ならどちらでもよく、<0ならするだけ損ということになる。
これは、W1+P1>W2+P2と変形できる。
つまり、「重さ+力」が大きいトナカイを優先的に引く側にする貪欲法※が成立する。

vectorにしてソートするなり、priority_queue※を使うなり、実装方法は多数。
全員引く方において1匹ずつ載せていくか、全員乗せておいて1匹ずつ下ろしていきながら動く匹数の限界を探す。

解答例


注意点

力と重さが同じ場合、動く

なんとなく力が勝っていないといけなさそうなイメージをもつが、問題をちゃんと読むと同じでも動く。等号のつける/つけないを間違えないように。

重さ合計や力合計はlong long型を用いる

int型を超える計算が必要になるので注意。

別解

最近更新されたスレッド
ウィキ募集バナー