Official

A - モニタリングの最高値 / Monitoring Peak Editorial by admin

swe-2-high

解法

負荷レベルは 0 から 9 の 1 桁の数字として記録されている。求めるのは \(S\) に含まれる数字の最大値である。

文字 '0' から '9' は文字コード上でも数値としても大小関係が一致するので、文字列 \(S\) を先頭から走査し、最大の文字をそのまま出力すればよい。\(S\) の各文字 \(c\) について ans = max(ans, c) を繰り返す。初期値は '0' とする(\(N \geq 1\) なので必ず 1 文字以上が走査され、仮に初期値が残ることは問題にならない)。

Python では max(S) で文字列中の最大文字が直接得られる。

正しさの証明

走査の各ステップで ans は「これまでに見た文字の最大値」という不変条件を保つ。初期値 '0' は全ての可能な文字以下なので不変条件を壊さない。全文字の走査終了時、ans は \(S\) 全体の最大文字に等しい。数字文字の辞書順(文字コード順)は数値の大小関係と一致するため、これが最も高い負荷レベルである。最大値が複数回出現しても値は同じなので、出力に影響しない(タイブレークは不要)。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: 入力文字列を除けば \(O(1)\)

\(N \leq 100\) なので十分高速である。