# 2977. 成绩排序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
int score;
char id[12];
} Student;

int cmp(void const *_a, void const *_b) {
Student const *a = (Student const *)_a;
Student const *b = (Student const *)_b;
if (a->score == b->score)
return strcmp(a->id, b->id);
return b->score - a->score;
}

int main() {
int t;
scanf("%i", &t);
for (int i = 0; i < t; ++i) {
int n, m, g;
scanf("%i%i%i", &n, &m, &g);

int points[11];
for (int j = 1; j <= m; ++j)
scanf("%i", &points[j]);

Student students[500];
for (int j = 0; j < n; ++j) {
int s;
students[j].score = 0;
scanf("%s%i", students[j].id, &s);
for (int k = 0; k < s; ++k) {
int solve;
scanf("%i", &solve);
students[j].score += points[solve];
}
}
qsort(students, n, sizeof(Student), cmp);

int passed = 0;
while (students[passed].score >= g)
++passed;
printf("case #%i:\n%i\n", i, passed);

for (int j = 0; j < passed; ++j)
printf("%s %i\n", students[j].id, students[j].score);
}
}


AC程序+要点

### include

using namespace std;
struct Stu
{
string SID;
int score;
};
vector questions;
vector students;
int n,m,g,T;
int cmp(const Stu& aa,const Stu& bb)
{
if(aa.score!=bb.score) return aa.score>bb.score;
else return aa.SID>T;
for(int step=0;step>n>>m>>g;
for(int i=1;i<=m;i++)
{
int xx;cin>>xx;
questions.push_back(xx);
}
for(int i=1;i<=n;i++)
{
string sid;
int s,Score=0;
cin>>sid>>s;
for(int i=1;i<=s;i++)
{
int xx;cin>>xx;
Score+=questions[xx-1];
}
if(Score>=g) students.push_back((Stu){sid,Score});
}
sort(students.begin(),students.end(),cmp);
printf(“case #%d:\n”,step);
cout<<students.size()<<endl;
for(int i=0;i<students.size();i++)
cout<<students[i].SID<<’ ‘<<students[i].score<<endl;
}
return 0;
}

### include

typedef struct
{
char id[12];
int num;
} Student;

int cmp(const voida,const voidb)
{
Studentaa=(Student)a;
Studentbb=(Student)b;
int t;
if(t!=0)
return t;
else
return strcmp(aa->id,bb->id);
}

int main()
{
Student s[502];
int T,t;
int a[16];
scanf(“%d”,&T);
for(t=0; t=G)
count++;
printf(“case #%d:\n%d\n”,t,count);