Module b

Expand description

§ABC 404 B - Grid Rotation

refs: https://atcoder.jp/contests/abc404/tasks/abc404_b

色の反転とグリッドの回転はそれぞれ独立した操作であるため, それぞれの回転数ごとに必要な色の反転数を算出し, 回転数 + 反転数の最小値を出力すれば良い.

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

fn main() {
    input! {
      n: usize,
      mut s: [Chars; n],
      t: [Chars; n],
    }

    let mut ans = 1e+9 as usize;

    for rot in 0..4 {
        let count = reverse_count(&s, &t);
        ans = ans.min(count + rot);

        s = rotate_90(&s);
    }

    println!("{ans}");
}

fn reverse_count(s: &Vec<Vec<char>>, t: &Vec<Vec<char>>) -> usize {
    let n = s.len();
    let mut count = 0;

    for x in 0..n {
        for y in 0..n {
            if s[x][y] != t[x][y] {
                count += 1;
            }
        }
    }

    count
}

fn rotate_90(s: &Vec<Vec<char>>) -> Vec<Vec<char>> {
    let n = s.len();
    let mut rotated = vec![vec![' '; n]; n];

    for x in 0..n {
        for y in 0..n {
            rotated[y][(n - 1) - x] = s[x][y];
        }
    }

    rotated
}