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

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

ABC438E - Heavy Buckets

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

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

考え方

特定の人が持っているバケツは、いついかなるターンからでも今後の各ターンで受ける影響が同じである。
ということは、ダブリング※の出番。

  • 各人が持っているバケツが、1ターン後に、誰が持っていて、重さがどれだけ増えているかの一覧を作る
  • 各人が持っているバケツが、2ターン後に、誰が持っていて、重さがどれだけ増えているかの一覧を作る(1ターンの処理を2回やればわかる)
  • 各人が持っているバケツが、4ターン後に、誰が持っていて、重さがどれだけ増えているかの一覧を作る(2ターンの処理を2回やればわかる)
  • 各人が持っているバケツが、8ターン後に、誰が持っていて、重さがどれだけ増えているかの一覧を作る(4ターンの処理を2回やればわかる)
  • 中略
  • 各人が持っているバケツが、2^30ターン後に、誰が持っていて、重さがどれだけ増えているかの一覧を作る(2^29ターンの処理を2回やればわかる)
を事前に全部作っておく。

あとは、例えば27ターン目の情報が欲しければ、27のビットを見て「16ターン+8ターン+2ターン+1ターン」の経過をたどればよい。

解答例


注意点

long long型を使う。

答えやダブリング※表の値はint型に収まらない場合がある。

別解

タグ:

ダブリング
最近更新されたスレッド
ウィキ募集バナー