其实这题用BF也能做,就是会TLE罢了233333.
然后,用map的话还不太熟练,在这里记一下map的部分基本语法,免得以后忘了。
#include<cstdio>
#include<iostream>
#include<map>//首先是头文件 很关键
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
map<string,int> a;//声明一个map key是string类型,value是int类型,名称为“a” 很关键
a.clear();//对这个map进行清空 很关键
string s,ans;//定义两个string
int Max=-1;//存最大值,初始化为-1保证max会变化
for(int j=0;j<n;j++)
{
cin>>s;
a[s]++;//这是重点,a[s]对应的值进行++,计数
if(a[s]>Max)ans=s;//判断最大值
}
cout<<ans<<endl;
}
return 0;
}
这边还有一个输出map的东西,毕竟不会输出很尴尬,用到了迭代器。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
int main ()
{
int a, b;
while(scanf("%d %d",&a, &b) != EOF)
{
map<int,int> date;
date.clear();
int xishu, zhishu;
for(int q = 0; q < a + b; ++q)
{
cin>>xishu>>zhishu;
date[zhishu] += xishu;
}
map<int, int>::const_iterator ip;//声明一个迭代器,目前理解为一个类似指针的东西,迭代器的名字是 ip
for(ip = date.begin(); ip != date.end(); ++ip)//date.begin()是让迭代器指向map的开头,然后end是结束,++ip很关键
{
cout << ip->second << " " << ip->first << endl;//这个语法格式 “ip->second”是指向map中的第二个元素 first也就是第一个元素了
}
}
return 0;
}