原题链接:http://www.acmore.net/problem.php?id=1503
分析:不会做···怎么想都不会做。好像会,又不会。然后是第一次接触map.
代码:
#include<stdio.h>
#include<string>
#include<map> //map关联容器。
using namespace std;
map<string,int> mymap; //string是key,int是价值。
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
mymap.clear();
int i;
char s[20];
for(i=0;i<n;i++)
{
scanf("%s",s);
mymap[s]=1; //插入key,这有1,0两种状态,1表示mymap容器中有字符串s。可以想象成数组,s是数组下标。
}
for(i=0;i<m;i++)
{
scanf("%s",s);
if(mymap[s]!=1) //若s不存在容器中则输出NO,然后将s存入容器。
{
printf("YES\n");
mymap[s]=1;
}
else
{
printf("NO\n");
}
}
}
return 0;
}
总结:虽然没有领悟map的精髓,不过好像懂点了。
再来一个用set集合AC的代码。
#include<cstdio>
#include<algorithm>
#include<string>
#include<set>
using namespace std;
set<string> st; //定义一个元素为string的集合
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
st.clear();
char s[20];
for(int i=0;i<n;i++)
{
scanf("%s",s);
st.insert(s); //放入集合中
}
for(int i=0;i<m;i++)
{
scanf("%s",s);
if(st.count(s)) //查看s是否在st集合中。
{
printf("NO\n"); //在集合中输出NO;
}
else
{
printf("YES\n");
st.insert(s);
}
}
}
return 0;
}
总结:又是c++的STL,表示对这些真的不熟←_←.set集合也有很多要学的。