Submission #30764819


Source Code Expand

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

fn main() {
    input! {
        n: usize,
        q: usize,
    };
    // 0 AB
    //   CD
    // 1 CA
    //   DB
    // 2 DC
    //   BA
    // 3 BD
    //   AC
    // 4 CD
    //   AB
    // 5 DB
    //   CA
    // 6 BA
    //   DC
    // 7 AC
    //   BD
    let mut dir = 0;
    let mut color = vec![vec![0; n]; n];
    let m = n - 1;
    let f = |r: usize, c: usize, dir: usize| {
        let rc = m - c;
        let rr = m - r;
        match dir {
            0 => (r, c),
            1 => (rc, r),
            2 => (rr, rc),
            3 => (c, rr),
            4 => (rr, c),
            5 => (rc, rr),
            6 => (r, rc),
            7 => (c, r),
            _ => unreachable!(),
        }
    };
    for _ in 0..q {
        input! { t: usize }
        match t {
            1 => {
                input! {
                    x: Usize1,
                    y: Usize1,
                }
                let (i, j) = f(x, y, dir);
                color[i][j] = (color[i][j] + 1) % 2;
            }
            2 => {
                input! { c: char }
                match c {
                    'A' => match dir {
                        0 | 1 | 2 | 3 => dir = (dir + 1) % 4,
                        4 | 5 | 6 | 7 => dir = (dir - 4 + 4 - 1) % 4 + 4,
                        _ => unreachable!(),
                    },
                    'B' => match dir {
                        0 | 1 | 2 | 3 => dir = (dir + 4 - 1) % 4,
                        4 | 5 | 6 | 7 => dir = (dir - 4 + 1) % 4 + 4,
                        _ => unreachable!(),
                    },
                    _ => unreachable!(),
                }
            }
            3 => {
                input! { c: char }
                match c {
                    'A' => match dir {
                        0 | 1 | 2 | 3 => dir += 4,
                        4 | 5 | 6 | 7 => dir -= 4,
                        _ => unreachable!(),
                    },
                    'B' => match dir {
                        0 => dir = 6,
                        1 => dir = 7,
                        2 => dir = 4,
                        3 => dir = 5,
                        4 => dir = 2,
                        5 => dir = 3,
                        6 => dir = 0,
                        7 => dir = 1,
                        _ => unreachable!(),
                    },
                    _ => unreachable!(),
                }
            }
            _ => unreachable!(),
        }
    }
    for x in 0..n {
        for y in 0..n {
            let (i, j) = f(x, y, dir);
            print!("{}", color[i][j]);
        }
        println!();
    }
}

Submission Info

Submission Time
Task J - Rotate and Reverse
User bouzuya
Language Rust (1.42.0)
Score 6
Code Size 2675 Byte
Status AC
Exec Time 42 ms
Memory 3656 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 6 / 6
Status
AC × 3
AC × 23
Set Name Test Cases
Sample sample_00.txt, sample_01.txt, sample_02.txt
All case_00.txt, case_01.txt, case_02.txt, case_03.txt, case_04.txt, case_05.txt, case_06.txt, case_07.txt, case_08.txt, case_09.txt, case_10.txt, case_11.txt, case_12.txt, case_13.txt, case_14.txt, case_15.txt, case_16.txt, case_17.txt, case_18.txt, case_19.txt, sample_00.txt, sample_01.txt, sample_02.txt
Case Name Status Exec Time Memory
case_00.txt AC 42 ms 3532 KiB
case_01.txt AC 36 ms 3552 KiB
case_02.txt AC 36 ms 3516 KiB
case_03.txt AC 35 ms 3600 KiB
case_04.txt AC 41 ms 3656 KiB
case_05.txt AC 38 ms 3448 KiB
case_06.txt AC 35 ms 3484 KiB
case_07.txt AC 37 ms 3420 KiB
case_08.txt AC 36 ms 3592 KiB
case_09.txt AC 37 ms 3456 KiB
case_10.txt AC 17 ms 2384 KiB
case_11.txt AC 20 ms 2572 KiB
case_12.txt AC 25 ms 2956 KiB
case_13.txt AC 22 ms 3096 KiB
case_14.txt AC 14 ms 2504 KiB
case_15.txt AC 20 ms 2640 KiB
case_16.txt AC 30 ms 2784 KiB
case_17.txt AC 27 ms 3128 KiB
case_18.txt AC 21 ms 2912 KiB
case_19.txt AC 30 ms 2880 KiB
sample_00.txt AC 3 ms 2140 KiB
sample_01.txt AC 2 ms 2168 KiB
sample_02.txt AC 1 ms 1996 KiB