CSES - Datatähti 2022 loppu - Results
Submission details
Task:Sokkelo
Sender:xnor
Submission time:2022-01-22 14:49:53 +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: unreachable statement
  --> input/code.rs:89:5
   |
87 |     return Vec::new();
   |     ----------------- any code following this expression is unreachable
88 | 
89 |     let mut neighbors_a = HashSet::new();
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement

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

warning: value assigned to `neighbors_b` is ne...

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);
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) -> Vec<Vec<u8>> {
let mut stdin = BufReader::new(stdin());
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());
}
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 Vec::new();
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)