The ranklist of PAT is generated from the status list, which shows the scores of the submissions. This time you are supposed to generate the ranklist for PAT.

Input Specification:

Each input file contains one test case. For each case, the first line contains 3 positive integers, N (≤104), the total number of users, K (≤5), the total number of problems, and M (≤105), the total number of submissions. It is then assumed that the user id's are 5-digit numbers from 00001 to N, and the problem id's are from 1 to K. The next line contains K positive integers p[i] (i=1, ..., K), where p[i] corresponds to the full mark of the i-th problem. Then M lines follow, each gives the information of a submission in the following format:

user_id problem_id partial_score_obtained

where partial_score_obtained is either −1 if the submission cannot even pass the compiler, or is an integer in the range [0, p[problem_id]]. All the numbers in a line are separated by a space.

Output Specification:

For each test case, you are supposed to output the ranklist in the following format:

rank user_id total_score s[1] ... s[K]

where rank is calculated according to the total_score, and all the users with the same total_score obtain the same rank; and s[i] is the partial score obtained for the i-th problem. If a user has never submitted a solution for a problem, then "-" must be printed at the corresponding position. If a user has submitted several solutions to solve one problem, then the highest score will be counted.

The ranklist must be printed in non-decreasing order of the ranks. For those who have the same rank, users must be sorted in nonincreasing order according to the number of perfectly solved problems. And if there is still a tie, then they must be printed in increasing order of their id's. For those who has never submitted any solution that can pass the compiler, or has never submitted any solution, they must NOT be shown on the ranklist. It is guaranteed that at least one user can be shown on the ranklist.

Sample Input:
7 4 20
20 25 25 30
00002 2 12
00007 4 17
00005 1 19
00007 2 25
00005 1 20
00002 2 2
00005 1 15
00001 1 18
00004 3 25
00002 2 25
00005 3 22
00006 4 -1
00001 2 18
00002 1 20
00004 1 15
00002 4 18
00001 3 4
00001 4 2
00005 2 -1
00004 2 0
Sample Output:
1 00002 63 20 25 - 18
2 00005 42 20 0 22 -
2 00007 42 - 25 - 17
2 00001 42 18 18 4 2
5 00004 40 15 0 25 -
思路
  • ①第一次提交没通过编译得分为0
  • ②排序顺序:总分 > 完美解题数 > id
代码
#include<bits/stdc++.h>
using namespace std;
struct record
{
int id;
int score[5];
bool flag; // 判断有没有通过编译的提交
int total_score;
int perfect;
}a[10010]; int p[6];
int n, k, m;
bool cmp(record a, record b)
{
if(a.total_score != b.total_score)
return a.total_score > b.total_score;
else if(a.perfect != b.perfect)
return a.perfect > b.perfect;
else
return a.id < b.id;
} void init()
{
for(int i=1;i<=n;i++)
{
a[i].id = i;
memset(a[i].score, -1, sizeof(a[i].score)); //默认设置为没有通过编译
a[i].total_score = 0;
a[i].flag = false;
a[i].perfect = 0;
}
} //初始化 int main()
{
scanf("%d%d%d", &n, &k, &m);
init(); for(int i=0;i<k;i++) scanf("%d", &p[i]); int id, pos, mark;
for(int i=0;i<m;i++)
{
scanf("%d%d%d", &id, &pos, &mark);
pos -= 1; //p[]数组是从0开始的,对齐索引
if(mark != -1) a[id].flag = true; //只要不是编译错误,那么起码有一次有效提交
if(mark == p[pos] && a[id].score[pos] < p[pos]) a[id].perfect++; //第一次通过满分提交就 完美解决+1 避免多次统计
if(mark == -1 && a[id].score[pos] == -1) a[id].score[pos] = 0; //第一次编译错误,分值记为0分,例子:00005 2 -1 对应分数为0
if(mark > a[id].score[pos]) a[id].score[pos] = mark; //超过之前的得分就覆盖
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<k;j++)
{
if(a[i].score[j] != -1)
a[i].total_score += a[i].score[j];
}
} sort(a + 1, a + n + 1, cmp);
int rank = 1;
for(int i=1;i<=n;i++)
{
if(!a[i].flag)
continue; //一题都没对的不用考虑
else
{
if(i > 1 && a[i].total_score != a[i-1].total_score) rank = i;
printf("%d %05d %d", rank, a[i].id, a[i].total_score);
for(int j=0;j<k;j++)
if(a[i].score[j] == -1)
printf(" -");
else
printf(" %d", a[i].score[j]);
printf("\n");
}
}
return 0;
}
引用

https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032

PTA(Advanced Level)1075.PAT Judge的更多相关文章

  1. PAT (Advanced Level) 1075. PAT Judge (25)

    简单模拟题. 注意一点:如果一个人所有提交的代码都没编译通过,那么这个人不计排名. 如果一个人提交过的代码中有编译不通过的,也有通过的,那么那份编译不通过的记为0分. #include<cstd ...

  2. PTA(Advanced Level)1025.PAT Ranking

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  3. PAT 1075 PAT Judge[比较]

    1075 PAT Judge (25 分) The ranklist of PAT is generated from the status list, which shows the scores ...

  4. PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)

    1075 PAT Judge (25分)   The ranklist of PAT is generated from the status list, which shows the scores ...

  5. PTA 10-排序5 PAT Judge (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/677 5-15 PAT Judge   (25分) The ranklist of PA ...

  6. PTA(Advanced Level)1036.Boys vs Girls

    This time you are asked to tell the difference between the lowest grade of all the male students and ...

  7. PAT 1075. PAT Judge (25)

    题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1075 此题主要考察细节的处理,和对于题目要求的正确理解,另外就是相同的总分相同的排名的处理一定 ...

  8. PTA (Advanced Level)1035.Password

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  9. PAT甲级1075 PAT Judge

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032 题意: 有m次OJ提交记录,总共有k道 ...

随机推荐

  1. BZOJ 1116 [POI2008]CLO-Toll 并查集

    如果一个连通块是一个树的形态,则不合法,否则合法. 用并查集判断一下即可. #include <bits/stdc++.h> #define N 100005 #define M 2000 ...

  2. 计算(calc.cpp) 这题我搞了2晚上qwq

    终于会了!可喜可贺!可喜可贺!   计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)” ...

  3. 进程控制块(PCB)

    进程控制块PCB 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体. /usr/src/linux-headers- ...

  4. Shichikuji and Power Grid

    D. Shichikuji and Power Grid 参考:Codeforces Round #597 (Div. 2) 思路:一个很裸的最小生成树.把建立基站看成是,城市与源点(虚构的)建边.由 ...

  5. 浙江省赛C.Array in the Pocket(贪心+线段树)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4102 题意: 给出一个长度为n的数组,重排它们,让相同位置的数 ...

  6. OC和Swift进行互相调用

    swift调用oc的方法: 1.桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2.将需要引用的oc文件 .h头文件 添加到桥接类中. 如下: 然后在sw ...

  7. sql语句中where 1=1和 0=1 的作用

    sql where 1=1和 0=1 的作用   where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的 ...

  8. pm2 配合log4js处理日志

    1.pm2启动时通常会发现log4js记录不到日志信息: 2.决解方案,安装pm2的pm2-intercom进程间通信模块 3.在log4js的配置文件logger.js里添加如下命令: pm2: t ...

  9. 一个简易的PHP读取CSV文件的方法

    1. 思路:先打开文件,读取出文件有多少行,然后逐行读取数据放入一个数组中 public function read_csv_lines($csv_file = '', $lines = 0, $of ...

  10. GC垃圾回收 | 深入理解G1垃圾收集器和GC日志

    来源:并发编程网链接:http://ifeve.com/深入理解G1垃圾收集器/ G1 GC是Jdk7的新特性之一.Jdk7+版本都可以自主配置G1作为JVM GC选项:作为JVM GC算法的一次重大 ...