※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 10349번 문제인 Wet Tiles이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/10349
T분 뒤에 어떤 칸이 젖어있으려면 어떤 물이 새는 곳까지의 거리가 T-1 이하여야 함을 관찰하자. 단 여기서 두 칸 사이의 거리는 한 칸에서 다른 칸으로 벽이 아닌 인접한 칸으로의 이동만을 이용하여 이동할 때 필요한 최소 이동횟수(단, 이동이 불가능하면 무한대)라 하자.
따라서 물이 새는 칸들을 시점으로 하는 multisource BFS를 돌려 각 칸이 젖기 위한 최소시간을 구해 문제를 쉽게 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
using namespace std;
int R, C, T, L, W;
int dist[1002][1002];
queue<pair<int, int>> que;
int dr[4] = {0,0,1,-1};
int dc[4] = {1,-1,0,0};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
while (cin >> R >> C >> T >> L >> W) {
for (int r = 1; r <= R; r++) {
for (int c = 1; c <= C; c++) {
dist[r][c] = 0;
}
}
while (L--) {
int r, c; cin >> r >> c;
dist[r][c] = 1;
que.push(make_pair(r, c));
}
while (W--) {
int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2;
if (r1 == r2) {
if (c1 > c2) swap(c1, c2);
for (int c = c1; c <= c2; c++) dist[r1][c] = 1000000007;
}
else if (c1 == c2) {
if (r1 > r2) swap(r1, r2);
for (int r = r1; r <= r2; r++) dist[r][c1] = 1000000007;
}
else if (r2 - r1 == c2 - c1) {
if (r1 > r2) swap(r1, r2), swap(c1, c2);
for (int r = r1, c = c1; r <= r2; r++, c++) dist[r][c] = 1000000007;
}
else {
if (r1 > r2) swap(r1, r2), swap(c1, c2);
for (int r = r1, c = c1; r <= r2; r++, c--) dist[r][c] = 1000000007;
}
}
while (!que.empty()) {
int r = que.front().first, c = que.front().second; que.pop();
for (int i = 0; i < 4; i++) {
int rr = r + dr[i], cc = c + dc[i];
if (rr < 1 || rr > R || cc < 1 || cc > C || dist[rr][cc]) continue;
dist[rr][cc] = dist[r][c] + 1;
que.push(make_pair(rr, cc));
}
}
int ans = 0;
for (int r = 1; r <= R; r++) {
for (int c = 1; c <= C; c++) {
if (dist[r][c] && dist[r][c] <= T) ans++;
}
}
cout << ans << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 25993 // C++] Bellevue (5) | 2024.09.02 |
---|---|
[BOJ 23930 // C++] Parcels (6) | 2024.09.01 |
[BOJ 10425 // C++] 피보나치 인버스 (1) | 2024.08.30 |
[BOJ 1206 // C++] 사람의 수 (2) | 2024.08.29 |
[BOJ 32065 // C++] Short Function (0) | 2024.08.28 |