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 (≤), the total number of users, K (≤), the total number of problems, and M (≤), 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 − 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 -

题意:

  根据分数进行排序。

思路:

  这种题难道是不难就是细节太多,有一点忽略掉的话,就会被样例卡掉,更重要的是当自己写好代码之后还信心满满的认为自己写的是对的,找起bug来真的很难。

Code:

#include <bits/stdc++.h>

using namespace std;

struct User {
int id;
int rank;
int total_score = 0;
int NumOfPerfect = 0;
bool shown = false;
vector<int> problems;
}; bool cmp(User a, User b) {
if (a.total_score != b.total_score)
return a.total_score > b.total_score;
else if (a.NumOfPerfect != b.NumOfPerfect)
return a.NumOfPerfect > b.NumOfPerfect;
else
return a.id < b.id;
} int main() {
int n, k, m;
cin >> n >> k >> m;
vector<int> score(k + 1);
for (int i = 1; i <= k; ++i) cin >> score[i];
vector<User> users(n + 1);
int user_id, pro_id, pso;
for (int i = 1; i <= n; ++i) users[i].problems.resize(k + 1, -1);
for (int i = 0; i < m; ++i) {
cin >> user_id >> pro_id >> pso;
users[user_id].id = user_id;
int temp = users[user_id].problems[pro_id];
users[user_id].problems[pro_id] = max(pso, temp);
if (pso != -1)
users[user_id].shown = true;
else if (users[user_id].problems[pro_id] == -1)
users[user_id].problems[pro_id] = -2;
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= k; ++j) {
if (users[i].problems[j] != -1 && users[i].problems[j] != -2)
users[i].total_score += users[i].problems[j];
if (users[i].problems[j] == score[j]) users[i].NumOfPerfect++;
}
}
sort(users.begin() + 1, users.end(), cmp); for (int i = 1; i <= n; ++i) {
users[i].rank = i;
if (i != 1 && users[i].total_score == users[i - 1].total_score)
users[i].rank = users[i - 1].rank;
}
for (int i = 1; i <= n; ++i) {
if (users[i].shown) {
printf("%d %05d %d", users[i].rank, users[i].id,
users[i].total_score);
for (int j = 1; j <= k; ++j) {
if (users[i].problems[j] != -1 && users[i].problems[j] != -2)
printf(" %d", users[i].problems[j]);
else if (users[i].problems[j] == -1)
printf(" -");
else
printf(" 0");
}
printf("\n");
}
}
return 0;
}

参考:

  https://www.liuchuo.net/archives/2260

1075 PAT Judge的更多相关文章

  1. PAT 1075 PAT Judge[比较]

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

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

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

  3. PAT 1075. PAT Judge (25)

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

  4. PAT甲级1075 PAT Judge

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

  5. PAT 1075. PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submittions. Th ...

  6. PTA(Advanced Level)1075.PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  7. 1075 PAT Judge (25)

    排序题 #include <stdio.h> #include <string.h> #include <iostream> #include <algori ...

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

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

  9. PAT甲题题解-1075. PAT Judge (25)-排序

    相当于是模拟OJ评测,这里注意最后输出:1.那些所有提交结果都是-1的(即均未通过编译器的),或者从没有一次提交过的用户,不需要输出.2.提交结果为-1的题目,最后输出分数是03.某个题目从没有提交过 ...

随机推荐

  1. Docker搭建Hadoop环境

    文章目录 Docker搭建Hadoop环境 Docker的安装与使用 拉取镜像 克隆配置脚本 创建网桥 执行脚本 Docker命令补充 更换镜像源 安装vim 启动Hadoop 测试Word Coun ...

  2. 异常控制流(csapp)

    [前言]程序按照一定顺序执行称为控制转移.最简单的是平滑流,跳转.调用和返回等指令会造成平滑流的突变.系统也需要能够对系统状态的变化做出反应,这些系统状态不能被内部程序变量捕获但是,操作系统通过使控制 ...

  3. 一些 html+css 细节

    一. input 光标(插入符)颜色 input: { caret-color: #c0c0ff; } 二. 修改 placeholder 颜色 input::placeholder { color: ...

  4. git的工作管理和基础操作

    git的工作管理和基础操作 在本地创建git仓库管理我们的代码 初次使用git,先在本地配置一些基础信息 $ git config -l $ git config --global user.name ...

  5. 不用任何框架,Java 就能实现定时任务的 3 种方法!

    是的,不用任何框架,用我们朴素的 Java 编程语言就能实现定时任务. 今天,栈长就介绍 3 种实现方法,教你如何使用 JDK 实现定时任务! 1. sleep 这也是我们最常用的 sleep 休眠大 ...

  6. SpringMVC自定义兼容性Handler

    写在前面 看到这篇博客时,默认你知道Spring MVC中handler的作用,及前台请求到响应的的流转. 感谢网上其他大佬博客给我的借鉴,博客地址这里忘记了. 自定义Handler 我有时候会考虑是 ...

  7. golang 实现距离幂算法

    func main() { var test []Pow var x1 Pow x1.distance = 110 x1.grade = 0.31 var x2 Pow x2.distance = 8 ...

  8. 使用jhipster 加速java web开发

    jhipster,中文释义: Java 热爱者! JHipster is a development platform to quickly generate, develop, & depl ...

  9. 时间&空间(complexity)

    时间&空间复杂度 时间复杂度: 通俗来说就是随着数据量的增加,程序运行的时间花费量是怎么变化的,时间复杂度常用大o表示.举个例子,猜数字,猜10个,100个.1000个,猜数的数据量是在增加的 ...

  10. Qt3D使用assimp加载常规模型文件

    Qt3D使用assimp加载三维模型文件,assimp支持很多常规格式的三维模型格式: 其中支持导入的格式有: 3D 3DS 3MF AC AC3D ACC AMJ ASE ASK B3D BLEND ...