https://www.acmicpc.net/problem/18119

 

18119번: 단어 암기

준석이는 영어 단어를 외우려고 한다. 사전에는 N가지 단어가 적혀 있다. 모든 단어는 소문자이다. 단어 안에 있는 모든 알파벳을 알 때, 그 단어를 완전히 안다고 한다. 다음과 같은 쿼리들이 주

www.acmicpc.net

[난이도] 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

+ Recent posts