问题标题: 酷町堂:4877 统计最多的颜色

0
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
我要回答