Submission #41708232


Source Code Expand

use std::{cmp::Reverse, collections::BinaryHeap};

use proconio::input;

fn main() {
    input! {
        h: usize,
        w: usize,
        a: [[usize; w]; h],
    }

    let inf = 1_usize << 60;
    let f = |dist: &mut Vec<Vec<usize>>, i: usize, j: usize| {
        let mut pq = BinaryHeap::new();
        pq.push((Reverse(0), (i, j)));
        dist[i][j] = 0;
        while let Some((Reverse(d), (i, j))) = pq.pop() {
            if dist[i][j] < d {
                continue;
            }
            let dir = vec![(-1, 0), (0, -1), (0, 1), (1, 0)];
            for (dr, dc) in dir {
                let (nr, nc) = (i as i64 + dr, j as i64 + dc);
                if !(0..h as i64).contains(&nr) || !(0..w as i64).contains(&nc) {
                    continue;
                }
                let (nr, nc) = (nr as usize, nc as usize);
                if dist[nr][nc] > dist[i][j] + a[nr][nc] {
                    dist[nr][nc] = dist[i][j] + a[nr][nc];
                    pq.push((Reverse(dist[nr][nc]), (nr, nc)));
                }
            }
        }
    };

    let mut dist_h1 = vec![vec![inf; w]; h];
    f(&mut dist_h1, h - 1, 0);

    let mut dist_hw = vec![vec![inf; w]; h];
    f(&mut dist_hw, h - 1, w - 1);

    let mut dist_1w = vec![vec![inf; w]; h];
    f(&mut dist_1w, 0, w - 1);

    let mut min = inf;
    for i in 0..h {
        for j in 0..w {
            min = min.min(dist_h1[i][j] + dist_hw[i][j] + dist_1w[i][j] - 2 * a[i][j]);
        }
    }
    let ans = min;
    println!("{}", ans);
}

Submission Info

Submission Time
Task J - Leveling
User bouzuya
Language Rust (1.42.0)
Score 6
Code Size 1526 Byte
Status AC
Exec Time 10 ms
Memory 2252 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 6 / 6
Status
AC × 2
AC × 37
Set Name Test Cases
Sample example_01.txt, example_02.txt
All example_01.txt, example_02.txt, subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_01_18.txt, subtask_01_19.txt, subtask_01_20.txt, subtask_01_21.txt, subtask_01_22.txt, subtask_01_23.txt, subtask_01_24.txt, subtask_01_25.txt, subtask_01_26.txt, subtask_01_27.txt, subtask_01_28.txt, subtask_01_29.txt, subtask_01_30.txt, subtask_01_31.txt, subtask_01_32.txt, subtask_01_33.txt, subtask_01_34.txt, subtask_01_35.txt
Case Name Status Exec Time Memory
example_01.txt AC 6 ms 2128 KiB
example_02.txt AC 1 ms 2108 KiB
subtask_01_01.txt AC 1 ms 1992 KiB
subtask_01_02.txt AC 3 ms 2052 KiB
subtask_01_03.txt AC 1 ms 2044 KiB
subtask_01_04.txt AC 3 ms 2140 KiB
subtask_01_05.txt AC 3 ms 2228 KiB
subtask_01_06.txt AC 3 ms 2128 KiB
subtask_01_07.txt AC 4 ms 2216 KiB
subtask_01_08.txt AC 1 ms 1992 KiB
subtask_01_09.txt AC 1 ms 2144 KiB
subtask_01_10.txt AC 1 ms 1964 KiB
subtask_01_11.txt AC 3 ms 2084 KiB
subtask_01_12.txt AC 3 ms 2140 KiB
subtask_01_13.txt AC 3 ms 2176 KiB
subtask_01_14.txt AC 3 ms 2100 KiB
subtask_01_15.txt AC 3 ms 2252 KiB
subtask_01_16.txt AC 2 ms 2128 KiB
subtask_01_17.txt AC 2 ms 2000 KiB
subtask_01_18.txt AC 2 ms 2044 KiB
subtask_01_19.txt AC 1 ms 1972 KiB
subtask_01_20.txt AC 10 ms 2128 KiB
subtask_01_21.txt AC 3 ms 2172 KiB
subtask_01_22.txt AC 3 ms 2068 KiB
subtask_01_23.txt AC 3 ms 2176 KiB
subtask_01_24.txt AC 1 ms 1960 KiB
subtask_01_25.txt AC 1 ms 1896 KiB
subtask_01_26.txt AC 2 ms 1920 KiB
subtask_01_27.txt AC 2 ms 2144 KiB
subtask_01_28.txt AC 3 ms 2152 KiB
subtask_01_29.txt AC 3 ms 2164 KiB
subtask_01_30.txt AC 6 ms 2160 KiB
subtask_01_31.txt AC 4 ms 2164 KiB
subtask_01_32.txt AC 2 ms 2060 KiB
subtask_01_33.txt AC 2 ms 2168 KiB
subtask_01_34.txt AC 3 ms 2100 KiB
subtask_01_35.txt AC 1 ms 2056 KiB