能用STL解决的问题都不叫问题。

set是一个集合,S.size()表示的是不同标签的个数(即集合的大小)。

#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
typedef struct node
{
    string a;
    int count;
    int data;
}Node;
bool cmp(Node a,Node b)
{
    if(a.data!=b.data)
        return a.data>b.data;
    else
        return a.count<b.count;
}
int main()
{
    int i,j,n,temp;
    cin>>n;
    Node que[n];
    for (i=0;i<n;i++)
    {
        cin>>que[i].a;
        set<int>S;
        cin>>que[i].count;
        for (j=0;j<que[i].count;j++)
        {
            cin>>temp;
            S.insert(temp);
        }
        que[i].data=S.size();
    }
    sort(que,que+n,cmp);
    if (n==0)
    cout<<"- - -";
    else if (n==1)
    cout<<que[0].a<<" - -";
    else if (n==2)
    cout<<que[0].a<<" "<<que[1].a<<" -";
    else
    cout<<que[0].a<<" "<<que[1].a<<" "<<que[2].a;
}