#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define maxL 1000
typedef struct Submission
{
int subID;
int studentID;
char outputs[10][maxL];
}Submission;
typedef struct Grade {
int subID;
int studentID;
int grade;
} Grade;
int cmp(const void *a, const void *b){
Grade A = *((Grade *)a), B = *((Grade *)b);
if(A.studentID > B.studentID)
return 1;
else
return -1;
return 0;
}
void grading(char answer[10][maxL], Submission* sub, int num_of_submission){
Grade G[num_of_submission];
for(int i = 0; i < num_of_submission; i++){
G[i].studentID = sub[i].studentID, G[i].subID = sub[i].subID, G[i].grade = 0;
for(int j = 0; j < 10; j++)
if(strcmp(answer[j], sub[i].outputs[j]) == 0)
G[i].grade += 10;
}
qsort(G, num_of_submission, sizeof(Grade), cmp);
int max[1000] = {}, count = 0;
for(int i = 0; i < num_of_submission; i++){
printf("Student %d gets %d with Submission %d.n", G
[i
].
studentID, G
[i
].
grade, G
[i
].
subID);
if(G[i].grade > max[count])
max[count] = G[i].grade;
if(i == num_of_submission-1 || G[i].studentID != G[i+1].studentID){
printf("Student %d gets %d in this exam.n", G
[i
].
studentID, max
[count
]);
count++;
}
}
}
int main(){
char answer[10][maxL];
int num_of_submission;
Submission* sub;
for(int i=0;i<10;i++){
scanf("%s",answer[i]);
}
scanf("%d",&num_of_submission);
sub=(Submission*)malloc(num_of_submission*sizeof(Submission));
for(int i=0;i<num_of_submission;i++){
scanf("%d %d",&sub[i].subID,&sub[i].studentID);
for(int j=0;j<10;j++){
scanf("%s",sub[i].outputs[j]);
}
}
grading(answer,sub,num_of_submission);
}