这题就有点弱智了,为什么25分的题比20分的题还要简单。
熟练使用set就行了。
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
int const N=1e5+10;
int n;
struct Node{
int d=0,k;
string name;
bool operator < (const Node &W)const{
if(d==W.d)return k<W.k;
return d>W.d;
}
}node[N];
string name[N];
int main(){
cin>>n;
for(int i=0;i<n;i++){
set<int> s;
cin>>node[i].name;
int k;
cin>>k;
node[i].k=k;
while(k--){
int t;
cin>>t;
s.insert(t);
}
node[i].d=s.size();
}
sort(node,node+n);
if(n>=3)
for(int i=0;i<3;i++){
if(i==0)
cout<<node[i].name;
else cout<<" "<<node[i].name;
}
else {
for(int i=0;i<n;i++){
if(i==0)
cout<<node[i].name;
else cout<<" "<<node[i].name;
}
for(int i=0;i<3-n;i++){
cout<<" -";
}
}
puts("");
}