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[];
bool f;
Trie()
{
for(int i=;i<;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[];scanf("%s",s);
int len=strlen(s);
Trie* p=&Root;
for(int i=;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=;
while(m--)
{
char s[];
scanf("%s",s);
int len=strlen(s);
Trie* p=&Root;
bool ff=true;
for(int i=;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\n",ans);
return ;
}
上面是一个异常神奇指针做法QAQ