結果

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

ソースコード

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_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_a && c == '?' { 'A' } else { c }),
                    );
                    println!("{}", ans.iter().join(""));
                } else if back_w_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