会set的基础用法就可以A了,虽然是L2题,但是不难,代码如下,很好理解,set在这里不解释了自己去网上查一下就明白了:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<time.h>
#include<ctype.h>
#include<map>
#include<set>
#include<algorithm>
#include<stdlib.h>
#include<queue>
#include<stack>
using namespace std; struct DD
{ char name[];
int num;
int cc;
int zz; }A[];
int cmp(DD a,DD b)
{ if(a.cc==b.cc)
return a.zz<b.zz;
return a.cc>b.cc;
}
set<int >s;
int main()
{
int i,j,k,n,kk;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%s %d",A[i].name,&k);
s.clear();
for(j=;j<k;j++)
{ scanf("%d",&kk);
s.insert(kk);
}
A[i].cc=s.size();
A[i].zz=k;
}
sort(A,A+n,cmp);
if(n==)
printf("%s - -\n",A[].name);
else if(n==)
printf("%s %s -\n",A[].name,A[].name);
else
{
for(i=;i<;i++)
{
if(i==)
printf("%s",A[i].name);
else
printf(" %s",A[i].name);
}
printf("\n");
} }