题目
L2-1 点赞狂魔 - UJN2024天梯赛专题训练0-L2全部 (pintia.cn)
思路
按照题目意思模拟即可。输出标签出现次数平均值 = K / 不同标签总数,平均值的类型为float或double。
代码
#include<bits/stdc++.h>
using namespace std;
struct C{
string n;
int num;
float ave;
bool operator<(const C &t)const{
if(num != t.num) return num > t.num;
return ave < t.ave;
}
}node[1010];
int main()
{
int n, k;
cin >> n;
if(n==0) {cout<<'-'<<' '<<'-'<<' '<<'-';return 0;}
//求每位点赞狂魔点赞的不同标签数和平均值
for (int i = 0; i < n; i ++)
{
map<int, int> mp;
string name;
cin >> name >> k;
for (int j = 0; j < k; j ++)
{
int x;
cin >> x;
mp[x] ++;
}
float si = 1.0 * k / mp.size();
node[i] = {name, mp.size(), si};
}
//将点赞狂魔按自己制定的规则排序
sort(node, node + n);
// cout << node[0].n;
// int idx = 1;
// while(idx < n && idx < 3)
// {
// cout << " " << node[idx].n;
// idx ++;
// }
// while(idx < 3)
// {
// cout << " -";
// idx ++;
// }
if(n>=3) cout<<node[0].n<<' '<<node[1].n<<' '<<node[2].n;
else if(n==2) cout<<node[0].n<<' '<<node[1].n<<' '<<'-';
else if(n==1) cout<<node[0].n<<' '<<'-'<<' '<<'-';
return 0;
}