记录编号 283906 评测结果 AAAAAAAAAAAAA
题目名称 [USACO Dec08] 密信 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.210 s
提交时间 2016-07-16 08:06:47 内存使用 0.32 MiB
显示代码纯文本
#include <cstdio>
using namespace std;
template<typename T>inline void read(T &x){
	x=0;char ch;bool flag = false;
	while(ch=getchar(),ch<'!');
	if( ch == '-' ) ch=getchar(),flag = true;
	while(x=10*x+ch-'0',ch=getchar(),ch>'!');
	if( flag ) x=-x;
}
const int maxn = 10000 + 10 ;
struct Node{
	int size,flag;
	Node* ch[2];
	Node(){
		ch[0] = ch[1] = NULL;
		size = flag = 0;
	}
};
char str[maxn];
void insert(Node* rt,int len){
	for(int i=0;i<len;++i){
		if( rt->ch[ str[i] ] == NULL ) rt->ch[str[i]] = new Node;
		rt = rt->ch[ str[i] ];
		++(rt->size);
	}
	++(rt->flag);--(rt->size);
	return;
}
int Qer(Node *rt,int len){
	int ret = 0;
	for(int i=0;i<len;++i){
		if( rt->ch[str[i]] == NULL ) return ret;
		rt = rt->ch[str[i]];
		ret += rt->flag;
	}
	ret += rt->size;
	return ret;
}
int main(){
	freopen("sec.in","r",stdin);
	freopen("sec.out","w",stdout);
	int n,m,len;read(n);read(m);
	Node* root = new Node;
	for(int i=1;i<=n;++i){
		read(len);
		//scanf("%s",str);
		for(int i=0;i<len;++i) read(str[i]);
		insert(root,len);
	}
	for(int i=1;i<=m;++i){
		read(len);
		//scanf("%s",str);
		for(int i=0;i<len;++i) read(str[i]);
		printf("%d\n",Qer(root,len));
	}
	//getchar();getchar();
	return 0;
}