题解 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");
}
}