• 富豪凯匹配串


    链接:https://ac.nowcoder.com/acm/contest/1114/C
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 524288K,其他语言1048576K
    64bit IO Format: %lld

    题目描述

    有n个长度为m的文本串,每个串只含有'0'和'1'。接下来有Q次询问,每次给出一个长度为m的字符串,且只含有'0','1'和'_'。如10_1_1。下划线可以匹配'0'或'1'。即10_1_1可以匹配101111,101101,100111,100101四种串。每次询问求出n个文本串中有多少个可以与当前询问的串匹配。

    输入描述:

    第一行输入n,m
    接下来n行,每行输入一个长度为m的01串表示一个文本串。
    第n+2行输入Q
    接下来Q行,每行输入一个长度为m的字符串(只包含'0','1','_')。
    1<=n,m<=1000,1<=Q<=3000。

    输出描述:

    对于每次询问,输出n个文本串中有多少个与当前询问的串匹配。
    示例1

    输入

    复制
    5 6
    101101
    011011
    100110
    111000
    101111
    2
    1011_1
    1__1__

    输出

    复制
    2
    3

    说明

    第一次询问:有101101,101111与1011_1匹配
    第二次询问:有101101, 100110, 101111与1__1__匹配
     
     
    思路:由于是0,1串。判断是否相匹配可以通过位运算相与。是'_'的时候,一定匹配成功。不是'_'的时候,要判断是否相等。
     
    '_'可以匹配0或1,则表明不管对方是1或0都匹配成功,可以采用0相与,0与二进制数都为零。可以用bitset来优化。
     
    #include <iostream>
    #include<bitset>
    #include<string>
    using namespace std;
    bitset<1006> b[1006],p,q;
    string s;
    int main()
    {
        int n,m;
        cin >> n >> m;
        for(int i=0;i<n;i++)
        {
            cin >> s;
            for(int j=0;j<s.size();j++)
            {
                if(s[j]=='0')
                    b[i][j]=0;
                else
                    b[i][j]=1;
            }
        }
        int Q;
        cin >> Q;
        while(Q--)
        {
            cin >> s;
            for(int j=0;j<s.size();j++)
            {
                if(s[j]=='_')
                    q[j]=p[j]=0;
                else
                    q[j]=1,p[j]=s[j]=='1'? 1:0;
            }
            int ans=0;
            for(int i=0;i<n;i++)
            {
                
                if((q&b[i])==p)
                    ans++;
            }
            cout << ans << endl;
        }
        return 0;
    }
  • 相关阅读:
    HackerRank "Arithmetic Expressions" !
    HackerRank "Poker Nim"
    HackerRank "Nimble Game"
    HackerRank "Misère Nim"
    HackerRank "Triangle Numbers"
    HackerRank "Flipping the Matrix"
    HackerRank "Chessboard Game, Again!"
    HackerRank "Tower Breakers, Again!"
    HackerRank
    HackerRank "Richie Rich"
  • 原文地址:https://www.cnblogs.com/wjc2021/p/11695579.html
Copyright © 2020-2023  润新知