★ 输入文件:mtest.in
输出文件:mtest.out
简单对比
时间限制:1 s 内存限制:128 MB
【题目描述】
在上次的月考中Bugall同学违反了考场纪律还吃了处分,更可气的是在第二天的校会时
间学校就此事做了全校通报. 现已知在当天校会时间有总共N个同学听到了有关Bugall的处分决定.
Bugall同学在铁一有M个朋友,这M个人中有的可能听到了当天的处分决定,有的可能没
有听到,现在Bugall同学想知道他有几个朋友听到了当天的处分通报.
【输入格式】
第一行为一个整数N,从第2行到N+1行,每行用一个长度不超过200的字符串表示
一个人的名字.
第N+2行为一个整数M,从第N+3行到N+M+2行,每行用一个长度不超过200的字符
串表示Bugall同学一个朋友的名字.
【输出格式】
输出有几个Bugall同学的铁一朋友在当天的校会时间听到了Bugall处分通报.保证不重名。
【样例输入】
3 Dazui Erge Dapigu 2 Varpro Erge
【样例输出】
1
本来想用这题练习trie树,结果码了半天没码出来。。十分尴尬。。
然后用map过了 233
求路过的大佬帮忙改下trie树代码。。
屠龙宝刀点击就送
#include <algorithm> #include <iostream> #include <string> #include <cstdio> #include <map> using namespace std; map<string,int>q; int n,ans; string name; int main() { freopen("mtest.in","r",stdin); freopen("mtest.out","w",stdout); scanf("%d",&n); for(;n--;) { cin>>name; q[name]=1; } scanf("%d",&n); for(;n--;) { cin>>name; if(q[name]) ans++; } printf("%d",ans); return 0; }
#include <cstring> #include <cstdio> struct node { int Count; node *next[100]; }*root; int ans,n; node *create_cn() { node *tp=new node; memset(tp->next,0,sizeof(tp->next)); tp->Count=0; return tp; } void insert(char *word) { node *p=root; char *q=word; while(*q) { int id=*q-'A'; if(p->next[id]==NULL) p->next[id]=create_cn(); p=p->next[id]; ++q; p->Count++; } } bool search(char *word) { node *p=root; char *q=word; while(*q) { int id=*q-'A'; p=p->next[id]; q++; if(p==NULL) return 0; } return p->Count; } int main() { freopen("mtest.in","r",stdin); freopen("mtest.out","w",stdout); root=create_cn(); scanf("%d",&n); char name[301]; for(;n--;) { scanf("%s",name); insert(name); } scanf("%d",&n); for(;n--;) { scanf("%s",name); if(search(name)) ans++; } printf("%d",ans); return 0; }