結果

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

ソースコード

diff #
raw source code

fn main() {
    input! {
        n: Chars,
    }
    let sz = n.len();

    let mut ret = vec![0; sz];
    let mut f = false; // 確定フラグ
    for i in 0..sz {
        if f {
            ret[i] = 5;
            continue;
        }

        let val = n[i] as usize - 0x30;

        if val >= 6 {
            f = true;
            ret[i] = 5;
        }
        else if val == 4 || val == 5 {
            ret[i] = val;
        }
        else {
            // 後ろに戻って5を見つける
            let mut prev_5 = i;
            loop {
                // 5を見つけた
                if ret[prev_5] == 5 {
                    ret[prev_5] = 4;
                    for j in prev_5+1..=i {
                        ret[j] = 5;
                    }
                    f = true;
                    break;
                }

                // 5が見つからない
                if prev_5 == 0 {
                    // all5
                    ret.pop();
                    for _ in 0..ret.len() {
                        print!("5");
                    }
                    println!();
                    return;
                }
                prev_5 -= 1;
            }
        }
    }

    for k in 0..ret.len() {
        print!("{}", ret[k]);
    }
    println!();
}

// [6-9]***** -> 555555 (確定)
// [4,5]***** -> [4,5]***** (続きを見る)

// X[0-3]**** -> 5555
// 4[0-3]**** -> 5555  --> 5の位置に戻って4にする、すべて5、見つからないすべて5で-1桁
// 5[0-3]**** -> 45555

// 55454444000
// 55445555555

// 55454454245


// 5554[0-3]***
// 55455555

// const MOD93: usize = 998244353;
// const MOD17: usize = 1000000007;
// const INV2: usize = 499122177; // MOD93の剰余世界では、1/2の代わりにこれを掛ける
// const INF: usize = 1 << 60;
// const D: [(usize, usize); 4] = [(!0, 0), (0, !0), (1, 0), (0, 1)]; // 上左下右
// fn us(x: i32) -> usize { x as usize }

// 文字の定義
// const CHAR_SZ: usize = 26;
// const UPPER_A_ASCII : usize = 0x41;
// const UPPER_Z_ASCII : usize = UPPER_A_ASCII + SZ - 1;
// const LOWER_A_ASCII : usize = 0x61;
// const LOWER_Z_ASCII : usize = LOWER_A_ASCII + SZ - 1;
#[allow(unused)]
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone)]
struct Pos {
    x: usize,
    y: usize,
}
#[allow(unused)]
enum Direction {
    UP = 0,
    LEFT = 1,
    DOWN = 2,
    RIGHT = 3,
}
#[allow(unused)]
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone)]
struct LoopCount {
    ans: usize, // 答え
    step: usize, // 残りステップ
    pos: usize, // 現在位置
    cycle_len: usize, // サイクル数
    cycle_add: usize, // サイクルによる増加
}
#[allow(unused)]
use proconio::{input, marker::Chars, marker::Usize1};
// use proconio::{input, input_interactive, marker::Chars, marker::Usize1};

#[allow(unused)]
use std::{
    println, print,
    mem::swap,
    cmp::min, cmp::max,
    cmp::Reverse,
    collections::HashSet, collections::BTreeSet,
    collections::HashMap, collections::BTreeMap,
    collections::BinaryHeap,
    collections::VecDeque,
    iter::FromIterator,
};
#[allow(unused)]
use itertools::Itertools;
// #[allow(unused)]
// use num::{integer::gcd, Signed};
// #[allow(unused)]
// use num_integer::Roots;// 通常の平方根
// #[allow(unused)]
// use superslice::Ext;
// #[allow(unused)]
// use rand::Rng;
// let mut rng = rand::thread_rng();
// let n = rng.gen_range(1, 1000);

// 連想配列のデバッグ
#[allow(unused)]
fn dbg_print_mp(mp: &HashMap<usize, usize>) {
    for (&k, &v) in mp { println!("key:{} val:{}", k, v); }
}
// グリッドのデバッグ
#[allow(unused)]
fn dbg_print_grid(h: usize, w: usize, grid: &Vec<Vec<char>>) {
    for i in 0..h { for j in 0..w { print!("{}", grid[i][j]); } println!(); }
}
// 最短距離のデバッグ
#[allow(unused)]
fn dbg_print_dist(h: usize, w: usize, dist: &Vec<Vec<usize>>) {
    let limit = 255;
    for i in 0..h { for j in 0..w { print!("{:03} ", min(dist[i][j], limit)); } println!(); }
}
0