没想到直接拿 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\n",g.count());
}
return 0;
}