点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int tr[N][2],pass_cnt[N],end_cnt[N],idx;
int m,n;
void insert(const vector<int>& seq)
{
int p=0;
for(int x:seq){
int u=x;
if(!tr[p][u]) tr[p][u]=++idx;
p=tr[p][u];
pass_cnt[p]++;
}
end_cnt[p]++;
}
int query(const vector<int>& seq)
{
int p=0,ans=0;
for(int x:seq){
int u=x;
if(!tr[p][u]) return ans;
p=tr[p][u];
ans+=end_cnt[p];
}
ans+=pass_cnt[p]-end_cnt[p];
return ans;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
cin>>m>>n;
while(m--){
int len;
cin>>len;
vector<int> seq(len);
for(int j=0;j<len;j++) cin>>seq[j];
insert(seq);
}
while(n--){
int len;
cin>>len;
vector<int> seq(len);
for(int j=0;j<len;j++) cin>>seq[j];
cout<<query(seq)<<"\n";
}
return 0;
}