ABC-356
A
解法
B
解法
C
https://atcoder.jp/contests/abc356/tasks/abc356_c
#bit全探索
N,M,K = Integer().content keys, results = [0]*M, [0]*M
# データの分別、整理 for i in range(M): tmp = input().split() for j in tmp[1:-1]: keys[i] |= 1<<(int(j)-1) results[i] = (1 if tmp[-1]=='o' else 0)
ans = 0 for i in range(2**N): for j in range(M): ok = bin(i&keys[j])[2:].count("1") if ((ok<K and results[j]==1) or (K<=ok and results[j]==0)): break else: ans += 1
print(ans)
解法
の制約が小さいところと鍵が正解なのかダミーなのかという点からbit全探索が使えることがわかる。 正解とダミーの組み合わせをbitで表し、テストで使用した鍵をbitで洗わし、それぞれの論理和をとることで、1の数が使用した正解の鍵の数になる。すべてのテストで条件を満たしたらとすると題意を満たすことができる。
D
解法
E