简单模拟。注意结构体的二级排序以及字符串的排序。由于排序函数中间的n与N混淆,贡献了many WA。
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
int score[15];
const int SIZE = 1010;
struct stu
{
char s[21];
int grade;
}a[SIZE];
int cmp(const void *a, const void *b)
{
stu *p1 = (stu*)a;
stu *p2 = (stu*)b;
if(p1->grade != p2->grade) return p2->grade - p1->grade;
return strcmp(p1->s, p2->s);
}
int main()
{
int N, M, G;
while(~scanf("%d", &N),N)
{
scanf("%d%d", &M, &G);
int i, j, n;
int solve, tot = 0;
memset(a, 0, sizeof(a));
memset(score, 0, sizeof(score));
for(i = 1 ; i <= M; i++) scanf("%d", &score[i]);
for(i = 0 ; i < N; i++)
{
scanf("%s%d", a[i].s, &solve);
int sum = 0;
for(j = 0; j < solve; j++)
{
scanf("%d", &n);
sum += score[n];
}
if(sum >= G)
{
tot++;
}
a[i].grade = sum;
}
qsort(a, N, sizeof(a[0]), cmp);
printf("%d\n", tot);
for(i = 0 ; i < tot ; i++)
{
printf("%s %d\n", a[i].s, a[i].grade);
}
}
return 0;
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
int score[15];
const int SIZE = 1010;
struct stu
{
char s[21];
int grade;
}a[SIZE];
int cmp(const void *a, const void *b)
{
stu *p1 = (stu*)a;
stu *p2 = (stu*)b;
if(p1->grade != p2->grade) return p2->grade - p1->grade;
return strcmp(p1->s, p2->s);
}
int main()
{
int N, M, G;
while(~scanf("%d", &N),N)
{
scanf("%d%d", &M, &G);
int i, j, n;
int solve, tot = 0;
memset(a, 0, sizeof(a));
memset(score, 0, sizeof(score));
for(i = 1 ; i <= M; i++) scanf("%d", &score[i]);
for(i = 0 ; i < N; i++)
{
scanf("%s%d", a[i].s, &solve);
int sum = 0;
for(j = 0; j < solve; j++)
{
scanf("%d", &n);
sum += score[n];
}
if(sum >= G)
{
tot++;
}
a[i].grade = sum;
}
qsort(a, N, sizeof(a[0]), cmp);
printf("%d\n", tot);
for(i = 0 ; i < tot ; i++)
{
printf("%s %d\n", a[i].s, a[i].grade);
}
}
return 0;
}