주제 설명 :
링크 : 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
압축 상태
비트 세트를 사용하여
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<. 비트 / 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; } }