题目链接:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=3&problemid=5
方法:排序,sort的应用
思路:这个题是浙大2005年的研究生机试题,对于研究生机试确实很变态了,因为这是里面最简单的一道题了吧,相比之下,南大的真是简单多了(虽然自己做的也很差....),思路简单,就是联系sort函数的使用以及cmp函数的写法,注意复杂的结构体的使用。
难点:sort的使用
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
struct student
{
char nummer[100];
int solve_num;
int solve[30];
int sum;
}ss[1000+100];
bool cmp(student a,student b)
{
if(a.sum!=b.sum)
return a.sum>b.sum;
else if(a.sum == b.sum)
return strcmp(a.nummer,b.nummer)<0;
}
int main()
{
int stu,num,ave;//考生人数,考题数,要求平均成绩
int i,j;
int score[110]={0};
while(~scanf("%d %d %d",&stu,&num,&ave))
{
if(stu == 0) break;
for(i = 1;i <= num;i++)
scanf("%d",&score[i]);
for(i = 0;i < stu;i++)
{
ss[i].sum = 0;
scanf("%s",&ss[i].nummer);
scanf("%d",&ss[i].solve_num);
for(j = 0;j < ss[i].solve_num;j++)
{
scanf("%d",&ss[i].solve[j]);
ss[i].sum = ss[i].sum+score[ss[i].solve[j]];
}
}
sort(ss,ss+stu,cmp);
int counter = 0;
for(i = 0;i < stu;i++)
if(ss[i].sum>=ave) counter++;
printf("%d\n",counter);
for(i = 0;i < stu;i++)
{
if(ss[i].sum>=ave)
{
printf("%s",ss[i].nummer);
printf(" ");
printf("%d\n",ss[i].sum);
}
}
}
}