๋ฌธ์ ๋งํฌ
20058๋ฒ: ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ (acmicpc.net)
20058๋ฒ: ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ
๋ง๋ฒ์ฌ ์์ด๋ ํ์ด์ด๋ณผ๊ณผ ํ ๋ค์ด๋๋ฅผ ์กฐํฉํด ํ์ด์ด์คํฐ์ ์์ ํ ์ ์๋ค. ์ค๋์ ํ์ด์ด์คํฐ์ ํฌ๊ธฐ๊ฐ 2N × 2N์ธ ๊ฒฉ์๋ก ๋๋์ด์ง ์ผ์ํ์์ ์ฐ์ตํ๋ ค๊ณ ํ๋ค. ์์น (r, c)๋ ๊ฒฉ์์ rํ c
www.acmicpc.net
๋ง๋ฒ์ฌ ์์ด ์ธ๋ฒ์งธ ์๋ฆฌ์ฆ. ์ญ์ ๊ตฌํ๋ฌธ์ ๋ค.
ํ์ด
๋ง๋ฒ์ฌ ์์ด๋ ์ด๋ฒ์ ํ์ด์ด์คํฐ์ ๋ฐฐ์ ๋ค.
์์ด๊ฐ Q๋ฒ์ ๋ช ๋ น๋์ ๋ช ๋ น์ด L์ ์ ๋ ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒฉ์๋ฅผ 2^L X 2^L ๊ตฌ๊ฐ์ผ๋ก ๋๋ ์ ๊ฐ ๊ตฌ๊ฐ๋ณ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ํจ ํ, 3๊ฐ ์ด์์ ์ผ์๊ณผ ์ธ์ ํ์ง ์์ ์ผ์์ ์์ด 1 ์ค์ด๋ ๋ค.
N์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ฉด ๊ฒฉ์์ ํฌ๊ธฐ๋ 2^N X 2^N์ด ๋๋ค.
๊ฒฉ์๋ฅผ ๊ฐ ๊ตฌ๊ฐ๋ณ๋ก ๋๋ ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ค.
ํ์ ํ ํ์ ๋ชจ๋ ๊ฒฉ์ ์นธ์ ๋๋ฉด์ ์ธ์ ํ ์ผ์์ด 3๊ฐ ์ดํ๋ฉด ์ผ์์ ์์ 1 ์ค์ธ๋ค. ์ฌ๊ธฐ์ ๋ชจ๋ ์นธ์์ ์ผ์์ด ์ค์ด๋๋ ๊ฒ์ด ๋์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ์์ด ์ค์ด๋ค ์นธ์ ๋ฐ๋ก ํ์ํด ๋ ํ์ ํ ๋ฒ์ ์์ ์ค์ฌ์ฃผ์๋ค.
Q๋ฒ์ ๋ช ๋ น ํ์, BFS ๋๋ DFS๋ฅผ ์ด์ฉํด์ ๊ฐ์ฅ ํฐ ๋ฉ์ด๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
์ด๋ ๋ฉ์ด๋ฆฌ๊ฐ ์๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <deque>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 64 + 5;
int N, Q;
int A[MAX_N][MAX_N];
int ans;
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int temp[MAX_N][MAX_N];
bool visited[MAX_N][MAX_N];
int add[MAX_N][MAX_N];
void Turn_A(int);
void Melting();
int BFS(pair<int, int>);
bool is_ok(pair<int, int>);
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> Q;
N = (int)pow(2, N);
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
cin >> A[i][j];
while (Q--) {
int L; cin >> L;
Turn_A(L);
Melting();
}
int total_ice = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
total_ice += A[i][j];
if (total_ice == 0) {
cout << "0\n" << "0\n";
return 0;
}
cout << total_ice <<"\n";
int mass = -1;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (!visited[i][j] && A[i][j])
mass = max(BFS({ i,j }), mass);
}
}
cout << mass << "\n";
return 0;
}
void Turn_A(int size) {
size = (int)pow(2, size);
for (int i = 1; i <= N - size + 1; i += size) {
for (int j = 1; j <= N - size + 1; j += size) {
memset(temp, 0, sizeof(temp));
for(int k = 0; k<size; k++)
for(int p = 0; p<size; p++)
temp[k][p] = A[i + k][j + p];
for (int k = 0; k < size; k++) {
for (int p = 0; p < size; p++) {
A[i + p][j + size - 1 - k] = temp[k][p];
}
}
}
}
}
void Melting() {
memset(add, 0, sizeof(add));
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (!A[i][j])
continue;
int cnt = 0;
for (int k = 0; k < 4; k++)
if (A[i + dy[k]][j + dx[k]])
cnt++;
if (cnt < 3)
add[i][j] = -1;
}
}
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
A[i][j] += add[i][j];
}
bool is_ok(pair<int, int> next) {
if (next.first < 1 || next.first > N || next.second < 1 || next.second > N
|| visited[next.first][next.second] || !A[next.first][next.second])
return false;
return true;
}
int BFS(pair<int, int> st) {
queue<pair<int, int>> q;
q.push(st);
int cnt = 0;
while (!q.empty()) {
pair<int, int> now = q.front();
q.pop();
if (visited[now.first][now.second])
continue;
visited[now.first][now.second] = true;
cnt++;
for (int i = 0; i < 4; i++) {
pair<int, int> next = { now.first + dy[i], now.second + dx[i] };
if (is_ok(next))
q.push(next);
}
}
return cnt;
}
|
cs |
๋ฌธ์ ๋ฅผ ์๋ชป์ดํดํด์ ๊ฐ์ฅ ํฐ ์ผ์์ด ๋ค์ด์๋ ๋ฉ์ด๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ธ ์ค ์์๋ค.
๊ทธ๋ ๊ฒ ํ์ฐธ์ ํค๋งจํ์ ๋ฌธ์ ๋ฅผ ๋ค์ ์ฝ๊ณ ์์๋ค.
'๋ฐฑ์ค > Gold' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 21609 : ์์ด ์คํ๊ต (0) | 2022.06.02 |
---|---|
[BOJ] 21608 : ์์ด ์ด๋ฑํ๊ต (0) | 2022.05.31 |
[BOJ] 20057 : ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ (0) | 2022.05.30 |
[BOJ] 20056 : ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด๋ณผ (0) | 2022.05.24 |
[BOJ] 20055 : ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (0) | 2022.05.23 |