Pagini recente »
Rating Nanu Ruxandra-Laura (isa_Nanu_Ruxy)
|
Rating Savu Vicentiu Dorian (Vicentiu)
|
Probleme pt a-7-a - III
|
Cod sursă (job #660321)
Cod sursă (job
#660321)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sabin.in");
ofstream fout("sabin.out");
int N , K , M , P , Q;
typedef struct node;
typedef struct node node;
typedef node* pnode;
struct node{
int cnt;
pnode fii[26];
node() : cnt(0){
fill(fii , fii + 26 , nullptr);
}
};
struct trie{
pnode root;
trie(){root = nullptr;}
void add(pnode &x , int idx , string &s){
if(x == nullptr){
x = new node;
}
++ x->cnt;
if(idx < s.size())
add(x->fii[s[idx] - 'a'] , idx + 1 , s);
}
int query(pnode &x , int idx , string &s , int p){
if(x == nullptr)
return 0;
if(!p)
return x->cnt;
return query(x->fii[s[idx] - 'a'] , idx + 1 , s , p - 1);
}
}T;
string sh(vector<string> &v){
string s;
for(int j = 0 ; j < P ; ++ j){
for(auto &y : v)
s += y[j];
}
return s;
}
int main()
{
fin >> N >> K >> M >> P >> Q;
for(int i = 1 ; i <= N ; ++ i){
vector<string> v(K);
for(auto &y : v)
fin >> y;
string s = sh(v);
T.add(T.root , 0 , s);
}
vector<string> t(M);
for(auto &y : t){
fin >> y;
}
for(int i = 1 ; i <= Q ; ++ i){
int x;
fin >> x;
vector<string> v(K);
for(auto &y : v){
int idx;
fin >> idx;
y = t[idx - 1];
}
string s = sh(v);
fout << T.query(T.root , 0 , s , x * K) - (x == P ? 0 : T.query(T.root , 0 , s , x * K + K)) << '\n';
}
return 0;
}