思路:
每个人的名字,点赞总数,点赞的不同标签的数量用结构体存。把每个人点赞的标签(序号)放进set中,每个人最后的set的size就是这个人点赞的不同标签的数量。处理完所有人就排序取前三名输出名字。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<set>
using namespace std;
int n;
struct Node{
string name;
int cnt;
int sum;
}node[110];
set<int> s;
bool my_cmp(Node a,Node b){
if(a.cnt!=b.cnt) return a.cnt>b.cnt;
else return a.sum<b.sum;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>node[i].name>>node[i].sum;
int temp;
for(int j=0;j<node[i].sum;j++){
cin>>temp;
s.insert(temp);
}
node[i].cnt=s.size();
s.clear();
}
sort(node,node+n,my_cmp);
int i=0;
for(;i<3&&i<n;i++){
if(!i) cout<<node[i].name;
else cout<<' '<<node[i].name;
}
for(;i<3;i++) cout<<' '<<'-';
system("pause");
}