DDCC2020予選D Digit Sum Replace

はじめに

カテゴリー競プロ初中級者100問では、Qiitaにて@e869120さんがレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】としてまとめられている100問をPythonで解いています。

全問題の一覧はこちらです

問題

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

方針

実際にて計算をしてみると、どのような順で予選ラウンドを開催しても開催の回数が変わらないと分かります。

ただし、愚直に先頭からシミュレーションを行うと処理が間に合わないため、計算量を削減する方法を考えます。

予選を行うことで、桁数、全体の和がどのように変化するかに着目します。

  • ある予選ラウンドの和が10以上の場合
    桁数は変わらない。全体の和は9減る。
  • そうでない場合
    桁数が1減る。全体の和は変わらない。

これらの情報を元に、全体の和を一桁にするために何度、予選ラウンドを開催すれば良いかを計算できます。

コード

解法がわかりさえすれば、実装はとてもシンプルです。

1
2
3
4
5
6
7
8
M = int(input())
S = 0 # 全体の和
C = 0 # 桁数
for m in range(M):
d, c= map(int, input().split())
S += d*c
C += c
print ((C-1)+(S-1)//9)

記事情報

  • 投稿日:2020年6月5日
  • 最終更新日:2020年6月5日