件名の説明:
リンク:https://ac.nowcoder.com/acm/contest/1114/C
出典:牛オフネットワーク
テキスト文字列のN-Mの長さは、各文字列は、「0」と「1」が含ま。次いで倍クエリーQがあり、たびに長さmの文字列が与えられ、そしてのみを含有する「0」、「1」と「_」。10_1_1として。試合下線「0」または「1」。すなわち、4種類の101111,101101,100111,100101 10_1_1一致文字列。nの現在のクエリ文字列一致するテキスト文字列を取得することができ、各番号を確認して下さい。
説明を入力します。
最初の入力ラインN、M
次のn行を、各入力ライン01は、長さmの文字列は、テキスト文字列を示しています。
N + 2 Q列の入力
次にQ線、Mの列の各入力ライン(のみを含む「0」、「1」、「_」)。
1 <= N、M <= 1000,1 <= Q <= 3000。
出力説明:
各クエリに対して、クエリ文字列と一致する現在の文字列の出力nの数が持っています。
例1
エントリー
6 5 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)使用して、名前空間STDを、 typedefの長い長いLL。 CONSTのINT N = 1E3 + 5、MOD = 1E9 + 9 。 INTのN、M、QQ。 ビット集合 <N> マップ[N]、P、Q。 チャーS [N]。INT メイン() { // 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型私= 0 ; 私は、n <; ++ I){ もし、((P&マップ[i])と== Q){ ANS ++ 。 } } COUT << ANS << ENDL。 } }