题目分析:本题因为有颜色,和每种颜色的个数,两个对应的值,所以马上想到了map数据结构。将map的值对应为每种颜色气球的个数,
map的键对应为气球的颜色,如此每读入一个气球,就对相对应的键值自增1,最后利用冒泡法选出最大的键值,作为输出。
实现代码:
Code
#include <map>
#include <string>
#include <iostream>
#include <vector>
#include "stdio.h"
using namespace std;
int main()
{
int times;
map<string,int> balloon;
vector<string> colo;
string stmp;
while(scanf("%d",×)!=EOF&×!=0)//因为它,我白白TLE了四次~~~~~
{
balloon.clear();
for(int i=0;i<times;i++)
{
cin>>stmp;
balloon[stmp]++;
}
map<string,int>::const_iterator itr;
int max=-1;
for(itr=balloon.begin();itr!=balloon.end();itr++)
{
if(itr->second>max)
{
max=itr->second;
stmp=itr->first;
}
}
cout<<stmp<<endl;//可以每次输出每次的结果~~~~,不必攒到最后输出
}
}
讨论:如代码中注释所示,此题在对输入结束判断时的出错(判断不规范)导致了4次TLE,而且也知道了,当次结果可以当次输出,
不必如Sample OutPut 一般攒到最后一同输出。另外由于map的查找性能比其他数据结构都要好一些,并且题目的性质正好满足map的性质,
所以选择了STL中的map。