https://www.acmicpc.net/problem/18119
[난이도] Gold4
[유형] 비트마스크
[풀이]
각 단어에 어떤 문자가 포함되어있는지만 기록하면 되므로 비트마스크를 이용해 현재 기억하고 있는
단어들과 O(NM)에 비교가 가능하다.
#include <iostream>
#include <string>
using namespace std;
int N,M,a[10001];
int main(){
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++){
string s;
cin >> s;
for(auto c : s) a[i] |= 1<<(c-'a');
}
int cur = (1<<26)-1;
while(M--){
int o,cnt=0;
char x;
cin >> o >> x;
if(o==1) cur ^= 1<<(x-'a');
else cur |= 1<<(x-'a');
for(int i=0;i<N;i++){
if(a[i] == (a[i]&cur)) cnt++;
}
cout << cnt << '\n';
}
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/18119.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 9007 : 카누 선수 (C++) (0) | 2021.02.06 |
---|---|
[BOJ/백준][Gold4] 3671 : 산업 스파이의 편지 (C++) (0) | 2021.01.31 |
[BOJ/백준][Gold4] 16932 : 모양 만들기 (C++) (0) | 2021.01.31 |
[BOJ/백준][Gold4] 8981 : 입력숫자 (C++) (0) | 2021.01.31 |
[BOJ/백준][Gold4] 1577 : 도로의 개수 (C++) (0) | 2021.01.31 |