没想到直接拿 bitset 能过 $10^8$~
code:
#include <bits/stdc++.h> #define N 1004 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int n,m; char G[N][N],S[N]; bitset<N>v[N][2],g,pp; int main() { // setIO("input"); int i,j; scanf("%d%d",&n,&m); for(i=1;i<=n;++i) { scanf("%s",G[i]+1); for(j=1;j<=m;++j) { if(G[i][j]=='1') { v[j][1][i]=1; } else { v[j][0][i]=1; } } } int q; scanf("%d",&q); for(i=1;i<=q;++i) { scanf("%s",S+1); for(j=1;j<=m;++j) g[j]=1; for(j=1;j<=m;++j) { if(S[j]=='_') continue; if(S[j]=='1') g&=v[j][1]; else g&=v[j][0]; } printf("%d ",g.count()); } return 0; }