7分高分求调
查看原帖
7分高分求调
1095782
GDDS楼主2025/1/15 20:20
#include<bits/stdc++.h>
using namespace std;
int tot=1;
struct tree{
	int son[2],cnt,end;
}a[500005];
int n,m;
void build(){
	int now=1,len,num;
	cin>>len;
	for(int i=1;i<len;i++){
		cin>>num;
		if(!a[now].son[num]) a[now].son[num]=++tot;
		now=a[now].son[num];
		a[now].cnt++;
	}
	cin>>num;
	if(!a[now].son[num]) a[now].son[num]=++tot;
	now=a[now].son[num];
	a[now].end++;
}
void find(){
	int len,now=1,num,ans=0,flag=0;
	cin>>len;
	for(int i=1;i<=len;i++){
		cin>>num;
		if(a[now].son[num]) now=a[now].son[num];
		else flag=1;
		if(!flag) ans+=a[now].end;
	}
	cout<<ans+a[now].cnt<<'\n';
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) build();
	for(int i=1;i<=m;i++) find();
}
2025/1/15 20:20
加载中...