ZOJ3207 80ers'Memory
★
输入:第一行为一个正整数N(1<=N<100)。以下N行每行一个关键单词,由字母,数字或下划线构成。接下来一个正整数K(1<=K<100)。以下K行每行第一个数为Ni,表示该行有Ni个单词,接下来是这Ni个单词,每个单词之间用空格分隔。
输出:对于K行的每一行,输出每行含有多少个关键单词。
分析:读入所有关键单词到set中去,然后对于每行依次判断每行中的单词是否在set中即可。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
map<string,int> my_map;//使用map保存关键单词
int main()
{
my_map.clear();
int n;
scanf("%d",&n);
while(n--)
{
string s;
cin>>s;
if(my_map[s]==0)my_map[s]++;//map中不存在的键值会自动初始化为0
}
int k;
scanf("%d",&k);
while(k--)
{
int m,sum=0;//sum为每行出现的关键单词总数
scanf("%d",&m);
while(m--)
{
string s1;
cin>>s1;
sum+=my_map[s1];
}
printf("%d\n",sum);
}
return 0;
}