分析:
通过sort函数和set函数的使用,大幅度简化算法。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef struct Stu
{
int goo1;
int goo2;
string name;
};
bool cmp(Stu a, Stu b)
{
if (a.goo2 != b.goo2)return a.goo2>b.goo2;//从大到小排列
return a.goo1<b.goo1;//从小到大排列
}
int main()
{
int n;
Stu stu[105];
cin >> n;
for (int i = 0; i<n; i++)
{
cin >> stu[i].name >> stu[i].goo1;
set <int> s;
for (int j = 0; j<stu[i].goo1; j++)
{
int temp;
cin >> temp;
s.insert(temp);
}
stu[i].goo2 = s.size();
}
sort(stu, stu + n, cmp);
for (int i = 0; i<n&&i<3; i++)
{
if (i)cout << ' ';
cout << stu[i].name;
}
if (n<3)
{
for (int i = 0; i<3 - n; i++)
printf(" -");
}
return 0;
}