提出 #30717048


ソースコード 拡げる

#[derive(Debug, Copy, Clone)]
enum Dir {
    S,
    R,
}

const RU: (i32, i32) = (1, 1);
const LU: (i32, i32) = (-1, 1);
const RB: (i32, i32) = (1, -1);
const LB: (i32, i32) = (-1, -1);

fn main() {
    let n: usize = read();
    let (ax, ay): (usize, usize) = (read::<usize>() - 1, read::<usize>() - 1);
    let (bx, by): (usize, usize) = (read::<usize>() - 1, read::<usize>() - 1);
    let mut field = vec![vec!['x'; n]; n];
    let mut dists = vec![vec![std::i32::MAX; n]; n];
    for i in 0..n {
        let s: String = read::<String>();
        field[i] = s.chars().collect();
    }
    let bounded_by_n = |x| -> bool { 0 <= x && x < (n as i32) };
    let mut deque = VecDeque::new();
    dists[ax][ay] = 0;
    deque.push_back(((ax, ay), (0, 0), 0));

    while let Some((p, dir, d)) = deque.pop_front() {
        for &(dx, dy) in &[RU, RB, LU, LB] {
            let nx = p.0 as i32 + dx;
            let ny = p.1 as i32 + dy;
            if bounded_by_n(nx) && bounded_by_n(ny) {
                let nx = (p.0 as i32 + dx) as usize;
                let ny = (p.1 as i32 + dy) as usize;
                if field[nx][ny] == '#' {
                    continue;
                }
                if dir == (dx, dy) && d < dists[nx][ny] {
                    deque.push_front(((nx, ny), dir, d));
                    dists[nx][ny] = d;
                } else if d + 1 < dists[nx][ny] {
                    deque.push_back(((nx, ny), (dx, dy), d + 1));
                    dists[nx][ny] = d + 1;
                };
            }
        }
    }

    let res = if dists[bx][by] == std::i32::MAX {
        -1
    } else {
        dists[bx][by]
    };
    println!("{}", res);
}

// =========
#[allow(unused_imports)]
use std::cmp::{max, min};
use std::collections::VecDeque;
#[allow(unused_imports)]
use std::collections::{HashMap, HashSet};
#[allow(unused_imports)]
use std::process::exit;

#[allow(dead_code)]
const MOD: usize = 1000000007;
#[allow(dead_code)]
const INF: usize = std::usize::MAX / 2;

fn read<T: std::str::FromStr>() -> T {
    use std::io::Read;
    let stdin = std::io::stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().expect("failed to parse token")
}

// =========

提出情報

提出日時
問題 E - Bishop 2
ユーザ khei4
言語 Rust (1.42.0)
得点 0
コード長 2495 Byte
結果 WA
実行時間 170 ms
メモリ 54864 KiB

コンパイルエラー

warning: variant is never constructed: `S`
 --> src/main.rs:3:5
  |
3 |     S,
  |     ^
  |
  = note: `#[warn(dead_code)]` on by default

warning: variant is never constructed: `R`
 --> src/main.rs:4:5
  |
4 |     R,
  |     ^

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 0 / 500
結果
AC × 3
AC × 50
WA × 10
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 7 ms 2060 KiB
sample_02.txt AC 2 ms 2092 KiB
sample_03.txt AC 2 ms 2056 KiB
test_01.txt AC 2 ms 2080 KiB
test_02.txt AC 2 ms 1960 KiB
test_03.txt AC 1 ms 2092 KiB
test_04.txt AC 2 ms 2080 KiB
test_05.txt AC 2 ms 2012 KiB
test_06.txt AC 89 ms 17556 KiB
test_07.txt WA 62 ms 11872 KiB
test_08.txt AC 22 ms 4012 KiB
test_09.txt AC 3 ms 2176 KiB
test_10.txt AC 11 ms 2944 KiB
test_11.txt WA 140 ms 43332 KiB
test_12.txt WA 46 ms 8620 KiB
test_13.txt WA 4 ms 2244 KiB
test_14.txt AC 5 ms 2516 KiB
test_15.txt AC 6 ms 3552 KiB
test_16.txt AC 3 ms 2080 KiB
test_17.txt WA 35 ms 6872 KiB
test_18.txt AC 35 ms 6760 KiB
test_19.txt AC 2 ms 2004 KiB
test_20.txt AC 36 ms 11408 KiB
test_21.txt AC 9 ms 3308 KiB
test_22.txt AC 52 ms 10292 KiB
test_23.txt AC 11 ms 3324 KiB
test_24.txt AC 8 ms 3556 KiB
test_25.txt AC 6 ms 2792 KiB
test_26.txt AC 100 ms 22916 KiB
test_27.txt WA 92 ms 16680 KiB
test_28.txt AC 11 ms 3092 KiB
test_29.txt AC 46 ms 15944 KiB
test_30.txt AC 56 ms 19640 KiB
test_31.txt WA 125 ms 28028 KiB
test_32.txt AC 114 ms 20680 KiB
test_33.txt AC 110 ms 19952 KiB
test_34.txt AC 68 ms 19708 KiB
test_35.txt AC 55 ms 19648 KiB
test_36.txt AC 113 ms 21684 KiB
test_37.txt WA 120 ms 21696 KiB
test_38.txt AC 108 ms 19988 KiB
test_39.txt AC 56 ms 19544 KiB
test_40.txt AC 55 ms 19552 KiB
test_41.txt AC 110 ms 21748 KiB
test_42.txt AC 114 ms 21748 KiB
test_43.txt WA 108 ms 20008 KiB
test_44.txt AC 56 ms 19652 KiB
test_45.txt AC 151 ms 49404 KiB
test_46.txt WA 144 ms 36308 KiB
test_47.txt AC 151 ms 49208 KiB
test_48.txt AC 157 ms 49448 KiB
test_49.txt AC 149 ms 49244 KiB
test_50.txt AC 168 ms 54780 KiB
test_51.txt AC 166 ms 54824 KiB
test_52.txt AC 165 ms 52660 KiB
test_53.txt AC 164 ms 54632 KiB
test_54.txt AC 170 ms 54864 KiB
test_55.txt AC 168 ms 54768 KiB
test_56.txt AC 165 ms 54720 KiB
test_57.txt AC 69 ms 19680 KiB