简单模拟。注意结构体的二级排序以及字符串的排序。由于排序函数中间的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, 0sizeof(a));
        memset(score, 0sizeof(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;

} 

posted on 2012-07-20 20:57  有间博客  阅读(204)  评论(0编辑  收藏  举报