#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
struct student {
int id, pnum, s[5], sum, pcnt;
};
bool comp(student s1, student s2) {
if (s1.sum > s2.sum) {
return true;
}
else if (s1.sum < s2.sum) {
return false;
}
else {
if (s1.pnum > s2.pnum) {
return true;
}
else if (s1.pnum < s2.pnum) {
return false;
}
else {
if (s1.id < s2.id) {
return true;
}
else {
return false;
}
}
}
}
int main(void) {
int n, k, m, i, j, p[5], id, pn, ps;
scanf("%d %d %d", &n, &k, &m);
student *s = new student[n];
memset(s, 0, sizeof(student) * n);
for (i = 0; i < n; i++) {
s[i].id = i + 1;
for (j = 0; j < k; j++) {
s[i].s[j] = -2;
}
}
for (i = 0; i < k; i++) {
scanf("%d", p + i);
}
for (i = 0; i < m; i++) {
scanf("%d %d %d", &id, &pn, &ps);
if (s[id - 1].s[pn - 1] < ps) {
if (p[pn - 1] == ps) {
s[id - 1].pnum++;
}
s[id - 1].s[pn - 1] = ps;
}
if (ps > -1) {
s[id - 1].pcnt++;
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < k; j++) {
if (s[i].s[j] > 0) {
s[i].sum += s[i].s[j];
}
}
}
sort(s, s + n, comp);
int rank = 0;
for (i = 0; i < n && s[i].pcnt > 0; i++) {
if (i == 0) {
rank = i + 1;
}
else if (s[i].sum != s[i - 1].sum) {
rank = i + 1;
}
printf("%d %05d %d", rank, s[i].id, s[i].sum);
for (j = 0; j < k; j++) {
if (s[i].s[j] > 0) {
printf(" %d", s[i].s[j]);
}
else if (s[i].s[j] == -2) {
printf(" -");
}
else {
printf(" 0");
}
}
putchar('\n');
}
return 0;
}
1075. PAT Judge (25)解题报告
最新推荐文章于 2021-10-04 14:08:06 发布