http://acm.hdu.edu.cn/showproblem.php?pid=1236
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct student
{
string name;
int sum;
};
int cmp( const void *a , const void *b )
{
struct student *c = (struct student *)a;
struct student *d = (struct student *)b;
if(c->sum != d->sum)
return d->sum - c->sum;
else
{
if(c->name>d->name) return 1;
else if(c->name<d->name) return -1;
else return 0;
}
}
int main()
{
int N,M,G;
int scor[11],score,num;
while(cin>>N,N)
{
struct student stu[N];
int peo=0;
cin>>M>>G;
for(int i=0;i<M;i++)
cin>>scor[i];
for(int i=0;i<N;i++)
{
stu[i].sum=0;
cin>>stu[i].name;
cin>>num;
for(int j=0;j<num;j++)
{
cin>>score;
stu[i].sum+=scor[score-1];
}
if(stu[i].sum>=G)
peo++;
}
cout<<peo<<endl;
qsort(stu,N,sizeof(stu[0]),cmp);
for(int i=0;i<peo&&peo;i++)
cout<<stu[i].name<<' '<<stu[i].sum<<endl;
}
return 0;
}