牛客练习赛53-C富豪凯匹配串

BItsit的合理使用?

咱也不知道,咱也不敢问。

#include 
using namespace std;
typedef long long LL;
const int N = 1000 + 5, M = 2e4 + 5;
int n, m, Q;
bitset 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\n", ans);
    }
    return 0;
}

 

你可能感兴趣的