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. Laravel 多态关联中利用关联表相关字段进行排序的问题

    1 目标 1.1 在 Laravel 项目的开发中,多态的需求很常见,按多态关联进行排序的需求也是必须的. 1.2 请想像,我们有一个需求,荣誉栏目多态关联一个档案模型,要求在荣誉中按档案的推荐时间进 ...

  2. table表格合并列中相同的内容

    方法一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  3. 【8.27-模拟赛】remove

    题解: 代码: #include<iostream> #include<algorithm> #include<cstdio> #include<cstrin ...

  4. Django基础之template

    1. 模板系统的介绍 def current_datetime(request): now = datetime.datetime.now() html = "<html>< ...

  5. Django-视图函数/模板渲染/过滤器

    一.Django的视图函数 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个 ...

  6. Spring Cloud Eureka(二):Eureka 注册中心体验

    1.Eureka 简述 本文主要从应用角度体验一下注册中心的搭建和使用,后文会由浅入深学习Spring Cloud Eureka 的各种原理和机制. Spring Cloud Eureka 是 Spr ...

  7. js base64编码,C#解码

    JS: this.Base64 = function (str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, fu ...

  8. python格式化输出(% format用法)

    %基本用法: 十进制输出:print('%d' % 6)    6也可以换成其它的数字变量 八进制输出:print('%o' % 6)  6也可以换成其它的数字变量 字符串输出:print('%s' ...

  9. 码支付(php版本)应用

    1.下载软件 2.安装php 版本 2.打开软件,登陆支付宝 3.codepay_config.php  中填写逻辑代码 4.充值路径: 说明:$username = trim($_GET['user ...

  10. pip下载提速

    方法一使用国内镜像: 清华:https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中 ...