※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 20011번 문제인 Рекламный щит이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/20011
어떤 두 전구가 같은 그룹에 속한다는 것과 모든 K개의 그림문자에서 두 전구의 상태가 같아야 함은 동치임을 이용하자.
이를 이용하면, K개의 문자에서의 전구의 상태가 몇 가지 존재하는지 계수하는 것으로 문제를 해결할 수 있다.
특히 이 문제에서는 K가 100 이하이고 전구의 상태는 0과 1 두가지 뿐이므로, 128비트 정수 자료형을 이용해 상태를 비트마스킹하여 각 전구를 표현할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <set>
using namespace std;
typedef __int128 lll;
int K, R, C;
lll A[100][100];
set<lll> st;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> K >> R >> C;
for (lll k = 0, b = 1; k < K; k++, b <<= 1) {
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
char x; cin >> x;
if (x == '*') A[r][c] |= b;
}
}
}
for (int r = 0; r < R; r++) {
for (int c = 0; c < C; c++) {
st.insert(A[r][c]);
}
}
cout << st.size();
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 23649 // C++] Alice and Path (2) | 2024.09.23 |
---|---|
[BOJ 32315 // C++] Cool Phone Numbers (0) | 2024.09.20 |
[BOJ 10291 // C++] Ribbon (1) | 2024.09.15 |
[BOJ 16551 // C++] Potato Sacks (1) | 2024.09.14 |
[BOJ 9997 // C++] 폰트 (2) | 2024.09.13 |