BItsit的合理使用?
咱也不知道,咱也不敢问。
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1000 + 5, M = 2e4 + 5; int n, m, Q; bitset<N> a[N], p, q; char s[N]; int main() { scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { scanf("%s", s); for (int j = 0; j < m; j++) a[i][j] = s[j]=='1'? 1:0; } scanf("%d", &Q); while (Q--) { scanf("%s", s); int ans = 0; for (int i = 0; i < m; i++) { if (s[i] == '_') p[i]=q[i]=0;//方便之后进行子串的匹配 else p[i] = 1, q[i]=s[i]=='1'? 1:0;//手模一下? } for(int i = 0; i < n; i++){ if((p&a[i])==q){//bitsit可以进行& ^ | >> <<等运算 ans++; //&运算 0无论与1还是0都是0,用来表示_可以是0也可以是1 } } printf("%d ", ans); } return 0; }