Hdu 1236 排名

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

} 

你可能感兴趣的:(HDU)