Task: | Sokkelo |
Sender: | xnor |
Submission time: | 2022-01-22 14:00:05 +0200 |
Language: | Rust |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | WRONG ANSWER | 0 |
#2 | WRONG ANSWER | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#2 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#3 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#4 | WRONG ANSWER | 0.01 s | 2 | details |
#5 | WRONG ANSWER | 0.01 s | 2 | details |
#6 | WRONG ANSWER | 0.01 s | 2 | details |
#7 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#8 | WRONG ANSWER | 0.01 s | 2 | details |
#9 | WRONG ANSWER | 0.01 s | 2 | details |
#10 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#11 | WRONG ANSWER | 0.01 s | 2 | details |
#12 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#13 | WRONG ANSWER | 0.01 s | 2 | details |
#14 | WRONG ANSWER | 0.01 s | 1, 2 | details |
#15 | WRONG ANSWER | 0.01 s | 2 | details |
#16 | WRONG ANSWER | 0.01 s | 2 | details |
#17 | WRONG ANSWER | 0.01 s | 2 | details |
Compiler report
warning: unreachable statement --> input/code.rs:18:5 | 17 | return; | ------ any code following this expression is unreachable 18 | let maze = fill_maze(n, m); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable statement | = note: `#[warn(unreachable_code)]` on by default warning: unused variable: `n` --> input/code.rs:15:9 | 15 | let n = nums.next().unwrap(); | ^ help: if this is intentional, prefix it with an underscore: `_n` | = note: `#[warn(unused_variables)]` on by default warning: unused variable: `m` --> input/code.rs:16:9 | 16 | let m = nums.next().unwrap(); | ^ help: if this is intentional, prefix it with an underscore: `_m` warning: 3 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(); return; let maze = fill_maze(n, m); 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()); } let mut neighbors_a = HashSet::new(); let mut neighbors_b = HashSet::new(); for y in 0..n { for x in 0..m { 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)); } } } } 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 maze[y - 1][x] == b'.' && !neighbors_a.contains(&(x, y - 1)) { new_neighbors_a.insert((x, y - 1)); } if maze[y + 1][x] == b'.' && !neighbors_a.contains(&(x, y + 1)) { new_neighbors_a.insert((x, y + 1)); } if maze[y][x - 1] == b'.' && !neighbors_a.contains(&(x - 1, y)) { new_neighbors_a.insert((x - 1, y)); } if 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: WRONG ANSWER
input |
---|
20 20 #################### #A.................# #..................# #..................# ... |
correct output |
---|
1 |
user output |
---|
(empty) |
Test 2
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
20 20 #################### #A.................# #..................# #..................# ... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 3
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
20 20 #################### #A.................# #..................# #..................# ... |
correct output |
---|
9 |
user output |
---|
(empty) |
Test 4
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
1 |
user output |
---|
(empty) |
Test 5
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 6
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
335 |
user output |
---|
(empty) |
Test 7
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
20 20 #################### #####.############## ###.....############ ##.......########### ... |
correct output |
---|
10 |
user output |
---|
(empty) |
Test 8
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
436 |
user output |
---|
(empty) |
Test 9
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 10
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
20 20 #################### #B................## #################.## #################.## ... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 11
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 12
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
20 20 #################### ##########A######### ##########.######### ##########.######### ... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 13
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
2 |
user output |
---|
(empty) |
Test 14
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
20 20 #################### ##########A######### ##########.######### ##########.######### ... |
correct output |
---|
12 |
user output |
---|
(empty) |
Test 15
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 1000 ##############################... |
correct output |
---|
502 |
user output |
---|
(empty) |
Test 16
Group: 2
Verdict: WRONG ANSWER
input |
---|
3 1000 ##############################... |
correct output |
---|
1 |
user output |
---|
(empty) |
Test 17
Group: 2
Verdict: WRONG ANSWER
input |
---|
1000 3 ### #A# #.# #.# ... |
correct output |
---|
1 |
user output |
---|
(empty) |