PTA(Advanced Level)1075.PAT Judge
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的更多相关文章
- PAT (Advanced Level) 1075. PAT Judge (25)
简单模拟题. 注意一点:如果一个人所有提交的代码都没编译通过,那么这个人不计排名. 如果一个人提交过的代码中有编译不通过的,也有通过的,那么那份编译不通过的记为0分. #include<cstd ...
- PTA(Advanced Level)1025.PAT Ranking
To evaluate the performance of our first year CS majored students, we consider their grades of three ...
- PAT 1075 PAT Judge[比较]
1075 PAT Judge (25 分) The ranklist of PAT is generated from the status list, which shows the scores ...
- PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)
1075 PAT Judge (25分) The ranklist of PAT is generated from the status list, which shows the scores ...
- 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 ...
- 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 ...
- PAT 1075. PAT Judge (25)
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1075 此题主要考察细节的处理,和对于题目要求的正确理解,另外就是相同的总分相同的排名的处理一定 ...
- PTA (Advanced Level)1035.Password
To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...
- PAT甲级1075 PAT Judge
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032 题意: 有m次OJ提交记录,总共有k道 ...
随机推荐
- 【转】别人写的pe代码
// PEOperate.cpp: implementation of the PEOperate class. // //////////////////////////////////////// ...
- code命令用vscode打开项目代码
1. 打开vscode, 使用Command + shift + p, 输入shelll 选择
- 数据结构实验之链表八:Farey序列(SDUT 3331)
#include <bits/stdc++.h> using namespace std; typedef struct node { int data2; int data1;//mu ...
- node中从express到koa再到koa2的发展历程
koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本. 历史 1. Express Express是第一代最流行的web框架,它对Node.js的http进行了封 ...
- Hdu 5884
hdu 5884 Sort 题意: n个有序序列的归并排序.每次可以选择不超过k个序列进行合并,合并代价为这些序列的长度和,总的合并代价不能超过T, 问k最小是多少. 解法: 1:首先想到的是二分这个 ...
- Qt5.11.2 VS2015编译activemq发送程序 _ITERATOR_DEBUG_LEVEL错误和崩溃解决
1.问题描述: 运行环境是 win10 64位系统,开发环境是VS2015 ,Qt 5.11.2.开发activemq发送程序,遇到问题 (1)Qt5AxContainer.lib error LNK ...
- java实现二维码的生成与解析
简单介绍下二维码:二维码其实就是一种编码技术,只是这种编码技术是用在图片上了,将给定的一些文字,数字转换为一张经过特定编码的图片,而解析二维码则相反,就是将一张经过编码的图片解析为数字或者文字. 当然 ...
- vmware 中Linux系统怎么连接外网?
VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别 ...
- javafx随手记录
javafx的webview嵌套网页的时候可能会遇到一些需要允许跨域访问(禁止同源策略)的页面 那么我们在初始化的代码前加上以下代码即可 System.setProperty("sun.ne ...
- centos7 python2升级python3
安装前的准备环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurse ...