$$ \def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}} $$

◇◇ref036:DISCO presents ディスカバリーチャンネル コードコンテスト2020 予選 - D : Digit Sum Replace◇◇


☆問題URL

https://atcoder.jp/contests/ddcc2020-qual/tasks/ddcc2020_qual_d

☆問題の概要

$N(\leq 10^15)$桁の整数が与えられる。この数列から隣り合う2つの数を選び、その和に置き換える操作を整数が1桁になるまで繰り返す。例として $$2378\rightarrow 578, 2108, 2315$$ など。できるだけ多く操作したいとき、操作回数の最大値を求めよ。

☆解法

桁を2つ選んで足し合わせたとき、繰り上がりが起こらなかった場合には桁が1つ減り、繰り上がりが起こった場合は桁は減らずに桁和が9減る。1桁の整数の桁和は必ず9以下なので、操作終了までに繰り上がりは必ず$\left\lfloor \frac{digitsum-1}{9} \right\rfloor$回起こる。

以上のことから、予選の回数は手順によらず、桁数-1に繰り上がり回数を足したものが答えである。

☆反省

ちゃんと考察してからコードを書きましょう。

戻る