Pagini recente »
Atașamentele paginii Concurs cursuri de performanță | IQ Academy | clasa a 10-a
|
2024-03-10-clasa-5-concurs05
|
2024-02-06-clasa-6-tema-19
|
Cod sursă (job #582161)
|
Cod sursă (job #660322)
Cod sursă (job
#660322)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sabin.in");
ofstream fout("sabin.out");
int N , K , M , P , Q;
struct node{
int cnt;
node *fii[26];
node() : cnt(0){
fill(fii , fii + 26 , nullptr);
}
};
struct trie{
node *root;
trie(){root = nullptr;}
void add(node *&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(node *&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;
int main()
{
fin >> N >> K >> M >> P >> Q;
vector<string> v(K);
string s;
for(int i = 1 ; i <= N ; ++ i){
for(auto &y : v)
fin >> y;
s = "";
for(int j = 0 ; j < P ; ++ j){
for(auto &y : v)
s += y[j];
}
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;
for(auto &y : v){
int idx;
fin >> idx;
y = t[idx - 1];
}
s = "";
for(int j = 0 ; j < x + 1 ; ++ j){
for(auto &y : v)
s += y[j];
}
fout << T.query(T.root , 0 , s , x * K) - (x == P ? 0 : T.query(T.root , 0 , s , x * K + K)) << '\n';
}
return 0;
}