富豪凯匹配串

bitset的用法:https://www.cnblogs.com/magisk/p/8809922.html

https://blog.csdn.net/caipengbenren/article/details/90443961

例题汇总 https://blog.csdn.net/weixin_38686780/article/details/89377729

连接:富豪凯匹配串

题解:根据与运算的特点,只有为两个1时为1,否则为0。根据题意当‘_’遇到0/1时都是匹配成功的,我们不妨把‘‘_’设置为0,其余设置为1,然后让这个数组和输入的n个数组运算,得到的然后判断得到的串与输入的串是否相同。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1E3+7;
bitset<N>arr[N],q,p;
int main(){
    int n,m;
    cin>>n>>m;
    char s[N];
    for(int i=1;i<=n;i++) {
        scanf("%s",s);
        for(int j=0;j<m;j++){
            if(s[j]==0)    arr[i][j]=0;
            else arr[i][j]=1;
        }
    }
    
    int qq;
    cin>>qq;
    while(qq--){
        string s;
        cin>>s;        
        for(int i=0;i<m;i++){
            if(s[i]==_) q[i]=p[i]=0;
            else {
                p[i]=1;//将p串除了"_"外,其余全都设置为1,然后让其余输入的做与运算,并判断和输入的q是否相同 
                if(s[i]==1) {
                    q[i]=1;
                }
                else q[i]=0;
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            if((p&arr[i])==q)     ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}
相关文章
相关标签/搜索