케이 일치하는 문자열 리갈

주제 설명 :

링크 : https://ac.nowcoder.com/acm/contest/1114/C
출처 : 가축 오프 네트워크

텍스트 문자열의 N-m 길이, 각 스트링은 '0'과 '1'을 포함한다. 그런 시간 질의 Q가 있으며, 각 타임 m 길이의 문자열이 제공되며, 단 함유 '0', '1'및 '_'. 10_1_1으로. 매치 '0'또는 '1'을 밑줄. 즉, 사가지 101111,101101,100111,100101 10_1_1 일치하는 문자열입니다. 없음으로 현재의 쿼리 문자열 일치하는 텍스트 문자열을 얻을 수 있습니다 각 번호를 문의하십시오.

설명을 입력합니다 :

제 1 입력 라인은 N, M, 
다음의 n 개의 라인을 각각의 입력 라인 01 m 길이의 문자열은 문자열을 나타낸다.
제 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 

압축 상태
비트 세트를 사용하여

<. 비트 / stdc ++ H> #INCLUDE 
#INCLUDE <STDIO.H> 
#INCLUDE <iostream> 
#INCLUDE <CString을> 
#INCLUDE <알고리즘> 
#INCLUDE <cmath> 
 의 #pragma GCC 최적화 (2) 사용 스페이스 성병; 
타입 정의 LL;
CONST의 INT N = 1e3 + 5 , 개조 1E9 + = 9 ;
INT의 N, m, QQ; 
비트 세트 <N> 맵 [N, P, Q;
문자 S [N]; INT 의 main () 
{ //     cin.tie (0);
//     cout.tie (0);


   



//     IOS :: sync_with_stdio (0); 
    CIN >> >> N m;
    위한 ( int로 I = 0 ; I <N은; ++ I) { 
        는 scanf ( " %의 S ' , S);
         ( INT의 J = 0 ; J <m; ++ j)의
             경우 (S [J] == ' 1 ' )지도 [I] [J] = 1 ;
            다른 맵 [I] [J] = 0 ; 
    } 
    CIN >> QQ;
    동안 (qq-- ) { 
        는 scanf ( " % s의" , S)]
         에 대해 ( int로 I = 0 i가 m을 <; ++ I) {
             경우 (S [I] == ' _ ' ) { 
                P [I]가 = 0 , Q [I] = 0 ; 
            } 다른 { 
                P는 [I] = 1 ] 
                Q [I] =에서 S [I] == ' 1 ' ? 1 : 0 ; 
            } 
        } 
        
        INT ANS = 0 ;
          (int로 I = 0 ; 난 <N; ++ I) {
             경우 ((p & 맵 [I]) == Q) { 
                ANS ++ ; 
            } 
        } 
        
        COUT << ANS << ENDL; 
    } 
}
코드보기

 

 

추천

출처www.cnblogs.com/mwh123/p/11671044.html