开始自己写排序,WR到老家了,总是找不出错误,只好用sort了。看来以后也该学一学用一用stl了。不用多说,上代码。
AC代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
char name[22];
int counts;
}student[1010];
bool cmp(node a,node b)
{
if(a.counts==b.counts)
return strcmp(a.name,b.name)<0;//a.name<b.name时小于0,即按由a.name到 b.name的升序
else
return a.counts>b.counts;//降序
}
int main()
{
int n,m,g,i,j,num;
int a[20],ProblemId[20];
char s[22];
while(scanf("%d",&n),n)
{
int sub=0;
scanf("%d%d",&m,&g);
for(i=1;i<=m;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
scanf("%s %d",student[i].name,&num);
student[i].counts=0;
for(j=1;j<=num;j++){
scanf("%d",&ProblemId[j]);
student[i].counts+=a[ProblemId[j]];
}
if(student[i].counts>=g) sub++;
}
sort(student+1,student+n+1,cmp);
printf("%d\n",sub);
for(i=1;i<=sub;i++)
printf("%s %d\n",student[i].name,student[i].counts);
}
return 0;
}