【思路】:排序。
【注意】:qsort用法,字符串不要相减,用strmcp。升序a在前,b在后。降序相反。
【AC代码】:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define MAX 20+2
struct Candidate
{
char num[MAX];
int score;
};
int cmp(const void *a, const void *b)
{
Candidate *c = (Candidate*)a;
Candidate *d = (Candidate*)b;
if ((*c).score != ((*d).score))
return (*d).score - (*c).score;
else
return strcmp(((*c).num), (*d).num);
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int N = 0, M = 0, G = 0;
while (cin >> N >> M >> G && N)
{
int i = 0, cnt = 0;
int sco[10];
Candidate can[1000];
//input score
for (i = 0; i < M; i++)
cin >> sco[i];
for (i = 0; i < N; i++)
{
int m = 0, s = 0, sum = 0, j = 0;
cin >> can[i].num;
cin >> m;
for (j = 0; j < m; j++)
{
cin >> s;
sum += sco[s-1];
}
can[i].score = sum;
if (sum >= G)
cnt++;
}
//sort
qsort(can, N, sizeof(Candidate), cmp);
cout << cnt << endl;
for (i = 0; i < N; i++)
if (can[i].score >= G)
cout << can[i].num << " " << can[i].score << endl;
}
return 0;
}