题解 CF471A

题解 CF471A

这个题看题解都写得非常的冗余,不简洁,这里提供一种特别神奇的做法

首先他需要我们判断这里是否有相同的数字,并且还要通过这个相同的个数来进行判断

所以,我们可以一开始就统计下来,同时统计一下,出现过哪些数字

我们还需要进行一个数量的判断,为了方便取用,我们可以直接用 sort 对 vector (也就是存放出现数字的那个存储容器)关于每个数字的出现次数进行排序

这样,我们得到的 v[0] 就是出现次数最多的啦

后面的判断就贼简单了,我们只需要判断 v[0] 的大小就行了,有一点需要注意,如果 6 个数字全都是相同的,我们不能去取 v[1] 这样会越界,我们只需要判断一下这个 vector 的大小即可

#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
int a[10];
vector<int> v;
map<int,int> m;
int cmp(int x,int y){
	return m[x]>m[y];
}
int main(){
	for(int i=1;i<=6;i++){
		scanf("%d",&a[i]);
		if(!m[a[i]]){
			v.push_back(a[i]);
		}
		m[a[i]]++;
	}
	sort(v.begin(),v.end(),cmp);
	if(m[v[0]]<4){
		puts("Alien");
	}else if(v.size()==1 || m[v[1]]==2){
		puts("Elephant");
	}else{
		puts("Bear");
	}
}
posted @ 2022-11-30 09:12  Tyrue  阅读(10)  评论(0编辑  收藏  举报