/*
快速排序对结构体的使用
只要User交了编译通过的题可以显示,只要一道题交过了就可以显示0;
*/
#include <stdio.h>
#include <stdlib.h>
#define Maxn 10005
struct User {
int F;
int id;
int score;
int num[6];
int f[6];
int cnt;
}User[Maxn];
void PrintUser(int N, int K) {
int i, j, flag = 1, rank[Maxn] = {1, 1};
for(i = 1; i <= N; i++) {
if(User[i].F) {
if(flag) flag = 0;
else {
if(User[i].score != User[i-1].score) rank[i] = i;
else rank[i] = rank[i-1];
}
printf("%d ", rank[i]);
printf("%05d %d", User[i].id, User[i].score);
for(j = 1; j <= K; j++)
if(User[i].f[j]) printf(" %d", User[i].num[j]);
else printf(" -");
//printf(" %d", User[i].cnt);
printf("\n");
}
}
}
int cmp(const void *a, const void *b) {
int k;
if( ( (const struct User *)a)->score < ( (const struct User *)b)->score )
k = 1;
else if(( (const struct User *)a)->score > ( (const struct User *)b)->score )
k = -1;
else {
if( ( (const struct User *)a)->cnt < ( (const struct User *)b)->cnt )
k = 1;
else if( ( (const struct User *)a)->cnt > ( (const struct User *)b)->cnt )
k = -1;
else {
if( (const struct User *)a > (const struct User *)b ) k = 1;
else k = -1;
}
}
return k;
}
int main() {
int N, K, M;
int Knum[6];
int i, j, n, s, id;
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
scanf("%d%d%d", &N, &K, &M);
for(i = 1; i <= K; i++) scanf("%d", &Knum[i]);
for(i = 0; i < M; i++) {
scanf("%d%d%d", &id, &n, &s);
if(s >= 0) User[id].F = 1;
User[id].id = id;
User[id].f[n] = 1;
if(User[id].num[n] < s) {
User[id].score += s - User[id].num[n];
User[id].num[n] = s;
}
}
for(i = 1; i <= N; i++)
for(j = 1; j <= K; j++)
if(User[i].num[j] == Knum[j]) User[i].cnt++;
qsort(User+1, N, sizeof(struct User), cmp);
PrintUser(N, K);
}
10-排序5 PAT Judge (25分)
最新推荐文章于 2024-05-28 16:26:45 发布