1176. [郑州101中学] 月考
★★☆ 输入文件: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
#include<cstdio> #include<cstring> using namespace std; struct Trie { Trie* son[26]; bool f; Trie() { for(int i=0;i<26;i++) son[i]=NULL; f=false; } }Root; int main() { freopen("mtest.in","r",stdin); freopen("mtest.out","w",stdout); int n; scanf("%d",&n); //cout<<n<<endl; while(n--) { char s[205];scanf("%s",s); int len=strlen(s); Trie* p=&Root; for(int i=0;i<len;i++) { int x; if(s[i]>='A'&&s[i]<='Z') x=s[i]-'A'; else x=s[i]-'a'; if(p->son[x]==NULL) { p->son[x]=new Trie; } p=p->son[x]; } p->f=true; } int m; scanf("%d",&m); //cout<<m<<endl; int ans=0; while(m--) { char s[205]; scanf("%s",s); int len=strlen(s); Trie* p=&Root; bool ff=true; for(int i=0;i<len;i++) { int x; if(s[i]>='A'&&s[i]<='Z') x=s[i]-'A'; else x=s[i]-'a'; if(p->son[x]==NULL) { ff=false; break; } p=p->son[x]; } if(ff&&p->f) ans++; } printf("%d ",ans); return 0; }
上面是一个异常神奇指针做法QAQ