complete 2083.rs 2530.rs 2721.rs 4128.rs 5584.rs 7512.rs 21519.rs 21964.rs 22862.rs 22973.rs 24123.rs 26993.rs 27514.rs 33849.rs
This commit is contained in:
117
storage/zeta/rs/completed/5584.rs
Normal file
117
storage/zeta/rs/completed/5584.rs
Normal file
@@ -0,0 +1,117 @@
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
io::{read_to_string, stdin},
|
||||
};
|
||||
|
||||
fn main() {
|
||||
let temp = read_to_string(stdin()).unwrap();
|
||||
|
||||
let mut iter = temp
|
||||
.split_ascii_whitespace()
|
||||
.map(|x| x.parse::<usize>().unwrap());
|
||||
|
||||
let (w, h) = (iter.next().unwrap(), iter.next().unwrap());
|
||||
|
||||
let n = iter.next().unwrap();
|
||||
|
||||
let tapes = (0..n)
|
||||
.map(|_| {
|
||||
(
|
||||
iter.next().unwrap(),
|
||||
iter.next().unwrap(),
|
||||
iter.next().unwrap(),
|
||||
iter.next().unwrap(),
|
||||
)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let mut horizontal_map = HashMap::new();
|
||||
let mut vertical_map = HashMap::new();
|
||||
let mut horionztal_pivots = vec![];
|
||||
let mut vertical_pivots = vec![];
|
||||
horionztal_pivots.push(0);
|
||||
horionztal_pivots.push(w);
|
||||
vertical_pivots.push(0);
|
||||
vertical_pivots.push(h);
|
||||
for &(x1, y1, x2, y2) in tapes.iter() {
|
||||
horionztal_pivots.push(x1);
|
||||
horionztal_pivots.push(x2);
|
||||
vertical_pivots.push(y1);
|
||||
vertical_pivots.push(y2);
|
||||
}
|
||||
|
||||
horionztal_pivots.sort();
|
||||
vertical_pivots.sort();
|
||||
let mut cnt = 0;
|
||||
for pivot in horionztal_pivots.iter() {
|
||||
if !horizontal_map.contains_key(pivot) {
|
||||
horizontal_map.insert(*pivot, cnt);
|
||||
cnt += 1;
|
||||
}
|
||||
}
|
||||
let width = cnt - 1;
|
||||
let mut cnt = 0;
|
||||
for pivot in vertical_pivots.iter() {
|
||||
if !vertical_map.contains_key(pivot) {
|
||||
vertical_map.insert(*pivot, cnt);
|
||||
cnt += 1;
|
||||
}
|
||||
}
|
||||
let height = cnt - 1;
|
||||
|
||||
let mut field = vec![vec![false; height]; width];
|
||||
|
||||
for (x1, y1, x2, y2) in tapes.iter() {
|
||||
let (x1, y1, x2, y2) = (
|
||||
horizontal_map[x1],
|
||||
vertical_map[y1],
|
||||
horizontal_map[x2],
|
||||
vertical_map[y2],
|
||||
);
|
||||
|
||||
for i in x1..x2 {
|
||||
for j in y1..y2 {
|
||||
field[i][j] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut res = 0;
|
||||
let mut vis = field.clone();
|
||||
let delta = vec![(0, -1), (0, 1), (-1, 0), (1, 0)];
|
||||
for i in 0..width {
|
||||
for j in 0..height {
|
||||
if vis[i][j] {
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut deq = vec![(i, j)];
|
||||
|
||||
while !deq.is_empty() {
|
||||
let curr = deq.pop().unwrap();
|
||||
if vis[curr.0][curr.1] {
|
||||
continue;
|
||||
} else {
|
||||
vis[curr.0][curr.1] = true;
|
||||
}
|
||||
for (dx, dy) in delta.iter() {
|
||||
let nxt_x = curr.0 as isize + dx;
|
||||
if nxt_x < 0 || nxt_x >= width as isize {
|
||||
continue;
|
||||
}
|
||||
let nxt_y = curr.1 as isize + dy;
|
||||
if nxt_y < 0 || nxt_y >= height as isize {
|
||||
continue;
|
||||
}
|
||||
if vis[nxt_x as usize][nxt_y as usize] {
|
||||
continue;
|
||||
}
|
||||
deq.push((nxt_x as usize, nxt_y as usize));
|
||||
}
|
||||
}
|
||||
res += 1;
|
||||
}
|
||||
}
|
||||
|
||||
println!("{}", res);
|
||||
}
|
||||
Reference in New Issue
Block a user