0
已解决
题目描述 Description
今天是运动会,操场上插了n面迎风飘扬的旗帜。旗帜的颜色是五颜六色的,现在酷町猫和她的小伙伴们想知道,哪种颜色的旗帜数量最多。
输入描述 Input Description
多组测试数据,对于每组测试数据
第一行,一个正整数n,表示各种颜色的旗帜数量
接下来n行, 每行一个小写字母组成的字符串,表示一种颜色
输出描述 Output Description
对于每组测试数据,单独输出一行数量最多的颜色,如果有多个颜色数量满足条件,则输出字典序最小的一个
WA10
#include<iostream>
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
map<string,int>b;
int n;
string s[1005];
int main(){
while(cin>>n){
for(int i=1;i<=n;i++){
cin>>s[i];
b[s[i]]++;
}
int maxn=-1;
string ans;
sort(s+1,s+1+n);
for(int i=1;i<=n;i++){
if(b[s[i]]>maxn){
maxn=b[s[i]];
ans=s[i];
}
}
cout<<ans<<endl;
}
return 0
0
已采纳
不是哈希表做吗,你排序什么,这题得用哈希表迭代,
定义迭代:
map<string,int>::iterator it;
开始迭代:
for(it=b.begin();it!=b.end();it++){
int pos=it->second;
if(pos>ans||(pos==ans&&(it->first)<idx)){
idx=it->first;
ans=pos;
}
}
最后输出idx就AC啦。
我猜你是sort有问题,他字典序最小和长度也有一定的关系。
张帆在2021-02-05 14:55:28追加了内容
对了,还要b.clear()清空哈希表。
0
0
