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

0
0
已解决
熊潇然
熊潇然
初级启示者
初级启示者

4877   统计最多的颜色

经验值:1200 时间限制:1000毫秒 内存限制:128MB

题目描述 Description

今天是运动会,操场上插了n面迎风飘扬的旗帜。旗帜的颜色是五颜六色的,现在酷町猫和她的小伙伴们想知道,哪种颜色的旗帜数量最多。

输入描述 Input Description

多组测试数据,对于每组测试数据
第一行,一个正整数n,表示各种颜色的旗帜数量
接下来n行, 每行一个小写字母组成的字符串,表示一种颜色

输出描述 Output Description

对于每组测试数据,单独输出一行数量最多的颜色,如果有多个颜色数量满足条件,则输出字典序最小的一个

样例输入 Sample Input

5

red

red

yellow

red

green

2

yellow

yellow

样例输出 Sample Output

red

yellow

数据范围及提示 Data Size & Hint

n<=1000

 

#include<bits/stdc++.h>
using namespace std;
int n;
string a[1005];
bool boo(string a,string b){
	if(a.size()!=b.size()){
		return a.size()<b.size();
	}
	return a<b;
}
int main(){
	while(cin>>n){
		bool f[1005];
		int maxf=0;
		string tmp;
		memset(f,0,sizeof(f));
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		sort(a+1,a+1+n,boo);
		for(int i=1;i<=n;i++){
			if(a[i]==a[i-1]){
				f[i]=f[i-1]+1;
			}else{
				f[i]=1;
			}
			if(f[i]>maxf){
				maxf=f[i];
				tmp=a[i];
			}
		}
		cout<<tmp<<endl;
	}
	return 0;
}

 

WA 10分

拿错啦!!!

熊潇然在2022-10-21 14:22:24追加了内容

哪错啦!!!

熊潇然在2022-10-21 16:54:09追加了内容
#include<bits/stdc++.h>
using namespace std;
int n;
string a[1005];
int f[1005];
bool boo(string a,string b){
    if(a.size()!=b.size()){
        return a.size()<b.size();
    }
    return a<b;
}
int main(){
    while(cin>>n){
        int maxf=0;
        string tmp;
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++){
            cin>>a[i];
            f[a[i]]++;(这里报错)
        }
        for(int i=1;i<=n;i++){
            if(f[i]==maxf){
                cout<<a[i];
            }
        }
    }
    return 0;
}

 

熊潇然在2022-10-22 10:40:06追加了内容
#include<bits/stdc++.h>
using namespace std;
int n;
string a[1005];
int f[1005];
bool boo(string a,string b){
	if(a.size()!=b.size()){
		return a.size()<b.size();
	}
	return a<b;
}
int main(){
	while(cin>>n){
		int maxf=0;
		string tmp;
		memset(f,0,sizeof(f));
		for(int i=1;i<=n;i++){
			cin>>a[i];
			f[a[i]]++;(报错)
			maxf=max(maxf,f[a[i]]);(报错)
		}
		sort(a+1,a+1+n,boo);
		for(int i=1;i<=n;i++){
			if(f[a[i]]==maxf){(报错)
				cout<<a[i];
			}
		}
	}
	return 0;
}

 

熊潇然在2022-10-22 10:40:12追加了内容
#include<bits/stdc++.h>
using namespace std;
int n;
string a[1005];
int f[1005];
bool boo(string a,string b){
	if(a.size()!=b.size()){
		return a.size()<b.size();
	}
	return a<b;
}
int main(){
	while(cin>>n){
		int maxf=0;
		string tmp;
		memset(f,0,sizeof(f));
		for(int i=1;i<=n;i++){
			cin>>a[i];
			f[a[i]]++;(报错)
			maxf=max(maxf,f[a[i]]);(报错)
		}
		sort(a+1,a+1+n,boo);
		for(int i=1;i<=n;i++){
			if(f[a[i]]==maxf){(报错)
				cout<<a[i];
			}
		}
	}
	return 0;
}

 


0
已采纳
郭梓强
郭梓强
初级光能
初级光能

你拿f[i]写干什么

直接排序,用桶记录,用maxn记录最多个数

再判断如果这个颜色出现次数==maxn

输出即可

0
0
熊潇然
熊潇然
初级启示者
初级启示者

@郭梓强 代码呢?

 

0
0
0
0
我要回答