题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1236
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 1002
using namespace std;
struct node
{
char id[21];
int score;
}stu[MAXN];
int cmp(const node &a,const node &b)
{
if(a.score==b.score)
{
if(strcmp(a.id,b.id)<0)
return 1;
else
return 0;
}
else
return a.score>b.score;
}
int main()
{
int n,m,num,i,cnt,g,indx;
int scores[MAXN];
while(scanf("%d",&n)&&n)
{
cnt=0;
for(i=1;i<=n;++i)
{
stu[i].score=0;
}
scanf("%d %d",&m,&g);
for(i=1;i<=m;++i)
scanf("%d",&scores[i]);
for(i=1;i<=n;++i)
{
scanf("%s %d",stu[i].id,&num);
while(num--)
{
scanf("%d",&indx);
stu[i].score+=scores[indx];
}
if(stu[i].score>=g)
cnt++;
}
sort(stu+1,stu+n+1,cmp);
printf("%d\n",cnt);
for(i=1;i<=n;++i)
{
if(stu[i].score>=g)
printf("%s %d\n",stu[i].id,stu[i].score);
else
break;
}
}
return 0;
}