14569 : 시간표 짜기

풀이

모든 경우를 다 돌려보면 된다.

bit를 사용하면 편하게 짤 수 있다.

코드

#include <stdio.h>
typedef unsigned long long ull;

ull t[1001];

int main() {
	int n, m, k;
	
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int k, a;
		scanf("%d", &k);
		for (int j = 0; j < k; j++) scanf("%d", &a), t[i] |= ((ull)1 << a);
	}

	scanf("%d", &m);
	for (int i = 0; i < m; i++) {
		int p, q, cnt = 0;
		ull tmp = 0;
		scanf("%d", &p);
		for (int j = 0; j < p; j++) scanf("%d", &q), tmp |= ((ull)1 << q);
		tmp = ~tmp;
		for (int j = 0; j < n; j++) if (!(tmp & t[j])) cnt++;
		printf("%d\n", cnt);
	}

	return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge

wookje.kwon's profile image

wookje.kwon

2017-05-31 12:08

Read more posts by this author