増減する数を選べるとすると、回操作をしたとき、最大値を取るが減ってその他の数が変化しないようにできることに注目する。
ステップ1
すべての数が以上になる、またはすべての数が未満になるまでシミュレーションする。後者の場合はここで終わりである。。
ステップ2
上に書いた通り、数を適当に選んで回操作をすると、最大のが減ってその他の数が変化しないようにできることに注目すると、すべての数が以下(かつ以上)になるまでの操作回数をまとめて数えられる。
具体的に述べれば、に対して回の操作をすると、が同じだけ減ってになる。1
ステップ1が必要なのは、の最小値が未満だと回の操作の途中で問題の条件を満たしてしまう場合があるからである。入力例4がこれに該当する。 。
ステップ3
すべての数が未満になるまでシミュレーションする。。
実際にはを選んで操作できるわけではないが、最大値が以下になるまでにそれぞれのに対して回の操作をすることには変わりないので、順番は気にしなくてよい。 ↩︎