Module c

Expand description

ยงABC 356 C - Keys

refs: https://atcoder.jp/contests/abc356/tasks/abc356_c

use proconio::input;

fn main() {
    input! {
        n: usize, m: usize, k: usize,
        test: [([usize], char); m],
    }

    let mut pattern = pattern_vec(n);

    for (select, result) in test {
        let select = select.iter().map(|&x| x - 1).collect::<Vec<_>>();

        pattern.retain(|bits| match result {
            'o' => select.iter().filter(|&&i| bits[i]).count() >= k,
            'x' => select.iter().filter(|&&i| bits[i]).count() < k,
            _ => unreachable!(),
        });
    }

    println!("{}", pattern.len());
}

fn pattern_vec(n: usize) -> Vec<Vec<bool>> {
    let mut pattern = vec![];

    for i in 0..(1 << n) {
        let mut bits = vec![];
        for j in 0..n {
            bits.push((i >> j) & 1 == 1);
        }
        pattern.push(bits);
    }

    pattern
}