记录编号 |
283906 |
评测结果 |
AAAAAAAAAAAAA |
题目名称 |
[USACO Dec08] 密信 |
最终得分 |
100 |
用户昵称 |
Sky_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;
}