結果

問題 No.3685 ワロングアンサーやんけ!
コンテスト
ユーザー yiwiy9
提出日時 2026-09-05 15:44:11
言語 Rust
(1.97.1 + proconio + num + itertools)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
WA  
実行時間 -
コード長 2,396 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,842 ms
コンパイル使用メモリ 190,648 KB
実行使用メモリ 6,272 KB
最終ジャッジ日時 2026-09-05 15:44:18
合計ジャッジ時間 5,333 ms
ジャッジサーバーID
(参考情報)
judge4_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 13 WA * 19
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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

fn main() {
    input! {
        t: usize,
    }

    for _ in 0..t {
        input! {
            r: Chars,
            s: String,
            k: usize,
        }
        let front = r[0..k].iter().copied().collect_vec();
        let front_cnt = front.len();
        let front_q_cnt = front.iter().filter(|&&c| c == '?').count();
        let front_a_cnt = front.iter().filter(|&&c| c == 'A').count();
        let front_w_cnt = front.iter().filter(|&&c| c == 'W').count();

        let back = r[k..].iter().copied().collect_vec();
        let back_q_cnt = back.iter().filter(|&&c| c == '?').count();
        let back_w_cnt = back.iter().filter(|&&c| c == 'W').count();

        match s.as_str() {
            "Warong" => {
                let replacing_w = back_w_cnt == 0 && back_q_cnt == 1;
                let mut ans = vec![];
                ans.extend(std::iter::repeat_n('A', front_cnt));
                ans.extend(
                    back.iter()
                        .map(|&c| if replacing_w && c == '?' { 'W' } else { c }),
                );
                println!("{}", ans.iter().join(""));
            }
            "NotWarong" => {
                if front_a_cnt == front_cnt {
                    let replacing_w = back_w_cnt == 1 && back_q_cnt == 1;
                    let replacing_a = back_w_cnt == 0 && back_q_cnt == 1;
                    let mut ans = vec![];
                    ans.extend(std::iter::repeat_n('A', front_cnt));
                    ans.extend(back.iter().map(|&c| {
                        if replacing_w && c == '?' {
                            'W'
                        } else if replacing_a && c == '?' {
                            'A'
                        } else {
                            c
                        }
                    }));
                    println!("{}", ans.iter().join(""));
                } else if back_q_cnt == 0 && front_q_cnt == 1 && front_w_cnt == 0 {
                    let mut ans = vec![];
                    ans.extend(front.iter().map(|&c| if c == '?' { 'W' } else { c }));
                    ans.extend(back);
                    println!("{}", ans.iter().join(""));
                } else {
                    println!("{}", r.iter().join(""));
                }
            }
            _ => unreachable!(),
        }
    }
}
0