使用map嵌套map记录每个用户的标签数,再使用结构体排序输出即可。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef long long ll;
const int N = 3e5 + 10;
const int mod = 998244353;
struct box{
int num;
string name;
int sum;
};
bool cmp(box x,box y){
if(x.num == y.num){
return x.sum < y.sum;
}
return x.num > y.num;
}
void solve() {
int n;
cin>>n;
map<string,map<int,int>> mp;
map<string,int> cnt;
for(int i = 1 ; i <= n ; i++){
string name;
cin>>name;
int k;
cin>>k;
cnt[name] += k;
for(int j = 1 ; j <= k ; j++){
int x;
cin>>x;
mp[name][x]++;
}
}
// cout<<mp.size()<<endl;
vector<box> ans;
for(auto it : mp){
ans.push_back({it.second.size(),it.first,cnt[it.first]});
}
sort(ans.begin(),ans.end(),cmp);
for(int i = 0 ; i < min(n,3ll) ; i++){
cout<<ans[i].name;
if(i != min(n,3ll)-1){
cout<<" ";
}
}
if(n < 3){
for(int i = 1 ; i <= 3 - n ; i++){
cout<<" "<<"-";
}
}
}
signed main() {
// ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tt = 1;
// cin >> tt;
while (tt--) {
solve();
}
return 0;
}