CSES - Datatähti 2022 loppu - Results
Submission details
Task:Sokkelo
Sender:xnor
Submission time:2022-01-22 14:55:08 +0200
Language:Rust
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
Test results
testverdicttimegroup
#10.01 s1, 2details
#20.01 s1, 2details
#30.01 s1, 2details
#40.01 s2details
#50.01 s2details
#60.01 s2details
#70.01 s1, 2details
#80.01 s2details
#90.01 s2details
#100.01 s1, 2details
#110.01 s2details
#120.01 s1, 2details
#130.01 s2details
#140.01 s1, 2details
#150.01 s2details
#160.01 s2details
#170.01 s2details

Compiler report

warning: unreachable statement
  --> input/code.rs:20:5
   |
19 | return;
   | ------ any code following this expression is unreachable
20 |     println!("{}", get_dist(maze, n, m));
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement
   |
   = note: `#[warn(unreachable_code)]` on by default
   = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

warning: unused variable: `maze`
  --> input/code.rs:18:9
   |
18 |     let maze = fill_maze(n, m, &mut stdin);
   |         ^^^^ help: if this is intentional, prefix it with an underscore: `_maze`
   |
   = note: `#[warn(unused_variables)]` on by default

warning: 2 warnings emitted

Code

use std::{
    collections::HashSet,
    io::{stdin, BufRead, BufReader},
};

fn main() {
    let mut stdin = BufReader::new(stdin());
    let mut cur_line = String::new();

    stdin.read_line(&mut cur_line).unwrap();
    let mut nums = cur_line
        .split_whitespace()
        .map(|s| s.parse::<usize>().unwrap());

    let n = nums.next().unwrap();
    let m = nums.next().unwrap();

    let maze = fill_maze(n, m, &mut stdin);
return;
    println!("{}", get_dist(maze, n, m));
}

fn get_dist(mut maze: Vec<Vec<u8>>, n: usize, m: usize) -> usize {
    let mut neighbors_a = HashSet::new();

    for y in 1..n - 1 {
        for x in 1..m - 1 {
            if maze[y][x] == b'A' {
                if y - 1 > 0 && maze[y - 1][x] != b'A' {
                    neighbors_a.insert((x, y - 1));
                }
                if y + 1 < n - 1 && maze[y + 1][x] != b'A' {
                    neighbors_a.insert((x, y + 1));
                }
                if x - 1 > 0 && maze[y][x - 1] != b'A' {
                    neighbors_a.insert((x - 1, y));
                }
                if x + 1 < m - 1 && maze[y][x + 1] != b'A' {
                    neighbors_a.insert((x + 1, y));
                }
            }
        }
    }

    for c in 1.. {
        let mut new_neighbors = HashSet::new();

        for &(x, y) in &neighbors_a {
            if maze[y][x] == b'B' {
                return c;
            }

            maze[y][x] = b'A';

            if y - 1 > 0 && maze[y - 1][x] != b'A' {
                new_neighbors.insert((x, y - 1));
            }
            if y + 1 < n - 1 && maze[y + 1][x] != b'A' {
                new_neighbors.insert((x, y + 1));
            }
            if x - 1 > 0 && maze[y][x - 1] != b'A' {
                new_neighbors.insert((x - 1, y));
            }
            if x + 1 < m - 1 && maze[y][x + 1] != b'A' {
                new_neighbors.insert((x + 1, y));
            }
        }

        neighbors_a = new_neighbors;
    }

    0
}

fn fill_maze(n: usize, m: usize, stdin: &mut impl BufRead) -> Vec<Vec<u8>> {
    let mut maze = Vec::with_capacity(n);

    for _ in 0..n {
        let mut cur_line = String::new();
        stdin.read_line(&mut cur_line).unwrap();

        maze.push(cur_line.into_bytes());

        if maze.last().unwrap().len() < m {
            return Vec::new();
        }
    }

    // let mut neighbors_a = HashSet::new();
    // let mut neighbors_b = HashSet::new();

    for y in 1..n - 1 {
        for x in 1..m - 1 {
            if maze[y][x] == b'A' {
                // if maze[y - 1][x] == b'.' {
                //     neighbors_a.insert((x, y - 1));
                // }
                // if maze[y + 1][x] == b'.' {
                //     neighbors_a.insert((x, y + 1));
                // }
                // if maze[y][x - 1] == b'.' {
                //     neighbors_a.insert((x - 1, y));
                // }
                // if maze[y][x + 1] == b'.' {
                //     neighbors_a.insert((x + 1, y));
                // }
            }
            if maze[y][x] == b'B' {
                // if maze[y - 1][x] == b'.' {
                //     neighbors_b.insert((x, y - 1));
                // }
                // if maze[y + 1][x] == b'.' {
                //     neighbors_b.insert((x, y + 1));
                // }
                // if maze[y][x - 1] == b'.' {
                //     neighbors_b.insert((x - 1, y));
                // }
                // if maze[y][x + 1] == b'.' {
                //     neighbors_b.insert((x + 1, y));
                // }
            }
        }
    }

    return maze;
/*
    loop {
        let mut new_neighbors_a = HashSet::new();
        let mut new_neighbors_b = HashSet::new();

        for &(x, y) in &neighbors_a {
            // maze[y][x] = b'A';

            if y > 0 && maze[y - 1][x] == b'.' && !neighbors_a.contains(&(x, y - 1)) {
                // new_neighbors_a.insert((x, y - 1));
            }
            if y < n - 1 && maze[y + 1][x] == b'.' && !neighbors_a.contains(&(x, y + 1)) {
                // new_neighbors_a.insert((x, y + 1));
            }
            if x > 0 && maze[y][x - 1] == b'.' && !neighbors_a.contains(&(x - 1, y)) {
                // new_neighbors_a.insert((x - 1, y));
            }
            if x < m - 1 && maze[y][x + 1] == b'.' && !neighbors_a.contains(&(x + 1, y)) {
                // new_neighbors_a.insert((x + 1, y));
            }
        }

        // for &(x, y) in &neighbors_b {
        //     maze[y][x] = b'B';

        //     if maze[y - 1][x] == b'.' && !neighbors_b.contains(&(x, y - 1)) {
        //         new_neighbors_b.insert((x, y - 1));
        //     }
        //     if maze[y + 1][x] == b'.' && !neighbors_b.contains(&(x, y + 1)) {
        //         new_neighbors_b.insert((x, y + 1));
        //     }
        //     if maze[y][x - 1] == b'.' && !neighbors_b.contains(&(x - 1, y)) {
        //         new_neighbors_b.insert((x - 1, y));
        //     }
        //     if maze[y][x + 1] == b'.' && !neighbors_b.contains(&(x + 1, y)) {
        //         new_neighbors_b.insert((x + 1, y));
        //     }
        // }

        if new_neighbors_a.is_empty() && new_neighbors_b.is_empty() {
            break maze;
        }

        neighbors_a = new_neighbors_a;
        neighbors_b = new_neighbors_b;
    }*/
}

Test details

Test 1

Group: 1, 2

Verdict:

input
20 20
####################
#A.................#
#..................#
#..................#
...

correct output
1

user output
(empty)

Test 2

Group: 1, 2

Verdict:

input
20 20
####################
#A.................#
#..................#
#..................#
...

correct output
2

user output
(empty)

Test 3

Group: 1, 2

Verdict:

input
20 20
####################
#A.................#
#..................#
#..................#
...

correct output
9

user output
(empty)

Test 4

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
1

user output
(empty)

Test 5

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
2

user output
(empty)

Test 6

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
335

user output
(empty)

Test 7

Group: 1, 2

Verdict:

input
20 20
####################
#####.##############
###.....############
##.......###########
...

correct output
10

user output
(empty)

Test 8

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
436

user output
(empty)

Test 9

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
2

user output
(empty)

Test 10

Group: 1, 2

Verdict:

input
20 20
####################
#B................##
#################.##
#################.##
...

correct output
2

user output
(empty)

Test 11

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
2

user output
(empty)

Test 12

Group: 1, 2

Verdict:

input
20 20
####################
##########A#########
##########.#########
##########.#########
...

correct output
2

user output
(empty)

Test 13

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
2

user output
(empty)

Test 14

Group: 1, 2

Verdict:

input
20 20
####################
##########A#########
##########.#########
##########.#########
...

correct output
12

user output
(empty)

Test 15

Group: 2

Verdict:

input
1000 1000
##############################...

correct output
502

user output
(empty)

Test 16

Group: 2

Verdict:

input
3 1000
##############################...

correct output
1

user output
(empty)

Test 17

Group: 2

Verdict:

input
1000 3
###
#A#
#.#
#.#
...

correct output
1

user output
(empty)