結果

問題 No.3021 Maximize eval
ユーザー atcoder8
提出日時 2025-02-14 22:20:01
言語 Rust
(1.83.0 + proconio)
結果
AC  
実行時間 12 ms / 2,000 ms
コード長 1,242 bytes
コンパイル時間 13,543 ms
コンパイル使用メモリ 401,644 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2025-02-14 22:20:19
合計ジャッジ時間 14,968 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 15
権限があれば一括ダウンロードができます

ソースコード

diff #

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

#[fastout]
fn main() {
    input! {
        t: usize,
        ss: [Chars; t],
    }

    for s in &ss {
        println!("{}", solve(s));
    }
}

fn solve(s: &[char]) -> String {
    let is_operator = |c: char| c == '+' || c == '-';

    let check_placeable_operator = |pos: usize| {
        pos != s.len() - 1 && (pos == 0 || !is_operator(s[pos - 1])) && !is_operator(s[pos + 1])
    };

    let mut output = String::new();
    output.reserve(s.len());
    let mut positive = true;
    for (i, &c) in s.iter().enumerate() {
        match c {
            '1'..='9' => {
                output.push(c);
            }
            '+' => {
                positive = true;
                output.push('+');
            }
            '-' => {
                positive = false;
                output.push('-');
            }
            '?' => {
                if positive {
                    output.push('9');
                } else if check_placeable_operator(i) {
                    output.push('+');
                    positive = true;
                } else {
                    output.push('1');
                }
            }
            _ => panic!(),
        }
    }

    output
}
0