結果

問題 No.3658 Darumaka Number 2
コンテスト
ユーザー 👑 KA37RI
提出日時 2026-08-30 14:28:59
言語 Rust
(1.97.1 + proconio + num + itertools)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
AC  
実行時間 1 ms / 2,000 ms
+ 526µs
コード長 1,396 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 6,415 ms
コンパイル使用メモリ 184,664 KB
実行使用メモリ 6,272 KB
最終ジャッジ日時 2026-08-30 14:29:11
合計ジャッジ時間 3,043 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

use proconio::{input, marker::Chars};

fn solve() -> String {
  input! {
    n: Chars,
  }
  let l = n.len();
  if l == 1 {
    if n[0] == '4' {
      "4".to_owned()
    } else {
      "5".to_owned()
    }
  } else {
    if (n[0] as u8) < b'4' {
      "5".repeat(l - 1)
    } else {
      let mut mode = 0u8;
      let mut pos = 0;
      for (i, ci) in n.iter().enumerate().map(|(i, &c)| (i, c as u8 - b'0')) {
        if ci < 4 {
          mode = 1;
          pos = i;
          break;
        } else if ci > 5 {
          mode = 2;
          pos = i;
          break;
        }
      }
      match mode {
        0 => n.iter().collect::<String>(),
        1 => {
          let mut ans = vec!['5'; l];
          let mut pos5 = l;
          for i in (0..pos).rev() {
            if n[i] == '5' {
              pos5 = i;
              break;
            }
          }
          if pos5 == l {
            return "5".repeat(l - 1);
          } else {
            for i in 0..pos5 {
              ans[i] = n[i];
            }
            ans[pos5] = '4';
          }
          ans.iter().collect::<String>()
        },
        2 => {
          let mut ans = vec!['5'; l];
          for i in 0..pos {
            ans[i] = n[i];
          }
          ans.iter().collect::<String>()
        },
        _ => unreachable!(),
      }
    }
  }
}

fn main() {
  let ans = solve();
  println!("{}", ans);
}
0