Skip to content

Commit

Permalink
past202010-open g
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Feb 16, 2024
1 parent e217b12 commit 01dca67
Showing 1 changed file with 56 additions and 3 deletions.
59 changes: 56 additions & 3 deletions cargo-atcoder-1.70.0/contests/past202010-open/src/bin/g.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,63 @@
use proconio::{input, marker::Usize1};
use std::collections::VecDeque;

use proconio::{input, marker::Chars};

fn ok(n: usize, m: usize, s: &[Vec<char>]) -> bool {
let mut count = 0_usize;
let mut visited = vec![vec![false; m]; n];
for i in 0..n {
for j in 0..m {
if s[i][j] == '#' || visited[i][j] {
continue;
}

count += 1;
let mut deque = VecDeque::new();
visited[i][j] = true;
deque.push_back((i, j));
while let Some((r, c)) = deque.pop_front() {
let dir = vec![(-1, 0), (0, -1), (0, 1), (1, 0)];
for (dr, dc) in dir {
let (nr, nc) = (r as i64 + dr, c as i64 + dc);
if !(0..n as i64).contains(&nr) || !(0..m as i64).contains(&nc) {
continue;
}
let (nr, nc) = (nr as usize, nc as usize);
if s[nr][nc] == '#' {
continue;
}
if visited[nr][nc] {
continue;
}
visited[nr][nc] = true;
deque.push_back((nr, nc));
}
}
}
}
count == 1
}

fn main() {
input! {
n: usize,
a: [Usize1; n],
m: usize,
mut s: [Chars; n],
};
let ans = n - a.len();

let mut count = 0_usize;
for i in 0..n {
for j in 0..m {
if s[i][j] != '#' {
continue;
}
s[i][j] = '.';
if ok(n, m, &s) {
count += 1;
}
s[i][j] = '#';
}
}
let ans = count;
println!("{}", ans);
}

0 comments on commit 01dca67

Please sign in to comment.