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. PHP mysqli_get_client_stats() 函数

    定义和用法 mysqli_get_client_stats() 函数返回有关客户端每个进程的统计. 语法 mysqli_get_client_stats(); 返回有关客户端每个进程的统计: < ...

  2. java读取 xml文件

    java读取xml文件的四种方法  转自https://www.cnblogs.com/lingyao/p/5708929.html Xml代码 1 <?xml version="1. ...

  3. 第四届西安邮电大学acm-icpc校赛 流浪西邮之寻找火石碎片 多体积条件背包

    题目描述 众所周知,由于木星引力的影响,世界各地的推进发动机都需要进行重启.现在你接到紧急任务,要去收集火石碎片,重启西邮发动机.现在火石碎片已成为了稀缺资源,获得火石碎片需要钱或者需要一定的积分.火 ...

  4. 【csp模拟赛2】黑莲花--数据结构+数论

    没有什么能够阻挡,你对被阿的向往.天天 AK 的生涯,你的心了无牵挂. 虐过大佬的比赛,也曾装弱装逼.当你低头的瞬间,才发现旁边的人. 把你的四肢抬起来,使劲地往门上撞.盛开着永不凋零,黑莲花. —— ...

  5. jQuery系列(八):jQuery的位置信息

    1.宽度和高度 (1):获取宽度 .width() 描述:为匹配的元素集合中获取第一个元素的当前计算宽度值.这个方法不接受任何参数..css(width) 和 .width()之间的区别是后者返回一个 ...

  6. 《30天自制操作系统》学习笔记--番外篇之Mac环境下的工具介绍

    这几天又有点不务正业了,书也没看,一直在搞这个破环境,尝试各种做法,网上各种垃圾信息,浪费了很多时间,说的基本都是废话,不过还是找到了一些,赶紧写下来,不然这个过几天又忘了 首先是环境,我用的是Max ...

  7. 条件随机场和CRF++使用

    参考资料 条件随机场和CRF++使用: http://midday.me/article/94d6bd4973264e1a801f8445904a810d 基于CRF++的中文分词 http://ww ...

  8. [Vue] : Vue指令

    Vue指令之 v-cloak v-cloak是解决解决插值表达式的闪烁问题 . 给插值表达式的元素加上v-cloak <p v-cloak>{{ msg }}</p> 为v-c ...

  9. 第一次使用Open Live Writer写博客

    写一下来试一试,感觉还是蛮有趣的.但是我并不知道写下来的文章是什么格式的,我刚才用VS Code打开看了一下好像都是二进制格式. 7.5正式入职,已经过去七天了.等培训结束就要去Base地了,新的生活 ...

  10. mysql: error while loading shared libraries: libnuma.so

    安装mysql后,执行初始化配置脚本,创建系统自带的数据库和表时报异常: [root@VM_0_12_centos mysql]# scripts/mysql_install_db --basedir ...