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(≤10​^4​​), the total number of users, K (≤5), the total number of problems, and M (≤10^5), 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 -
//用户id 00001 - N
//问题id 1 - K
//p[i] 第i个问题的满分 //M行 用户id 问题id 得分(-1提交未能通过编译,[0-p[i]分]) /*
输入格式
rank user_id total_score s[1]...s[k]
rank 名次,总分相同,名词相同 按满分数量和 按id非递减方式排序
s[1]...s[k] 提交问题获得的分数,如果没有提交输出- ,提交数次取最高分
没有提交任何解决方案或者任何解决方案都没有通过编译的就不进行排序了
*/ #include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = ; struct Student
{
int id;
int score[]; //总分以及1-k(<=5)问题得分 总分初始化为0,各题目初始化-1
int num_full; //满分题目数,初始化0
bool isSummit;
}stu[maxn]; void init(int n,int k);
bool cmp(Student a, Student b); int main()
{
int n,k,m;
int full_mark[];
scanf("%d%d%d", &n, &k, &m); init(n,k); for (int i = ; i <= k; i++)
{
scanf("%d",&full_mark[i]);
} int id, num_ques, nGrade;
for (int i = ; i < m; i++)
{
scanf("%d %d %d",&id, &num_ques, &nGrade); stu[id].id = id;
if (nGrade == - && stu[id].score[num_ques] == -)
{
stu[id].score[num_ques] = ;
}
if (nGrade != -)
{
stu[id].isSummit = true;
}
if (stu[id].score[num_ques] < nGrade) //分数大于已保存的,更替
{ stu[id].score[num_ques] = nGrade;
if (nGrade == full_mark[num_ques]) //满分时,满分数量+1
{
stu[id].num_full++;
}
}
} for (int i = ; i <= n; i++)
{
for (int j = ; j <= k; j++)
{
if (stu[i].score[j] != -)
{
stu[i].score[] += stu[i].score[j];
}
}
} sort(stu+, stu+n+, cmp); int rank = ;
for (int i = ; i <= n; i++)
{
if (!stu[i].isSummit)
{
break;
}
if (i != && stu[i].score[] != stu[i-].score[])
{
rank = i;
}
printf("%d %05d %d ", rank, stu[i].id, stu[i].score[]);
for (int j = ; j <= k; j++)
{
if (stu[i].score[j] == -)
{
printf("-");
}
else
{
printf("%d",stu[i].score[j]);
} if (j < k)
{
printf(" ");
}
else
{
printf("\n");
}
}
} return ;
} void init(int n,int k)
{
for (int i = ; i <= n; i++)
{
stu[i].score[] = ;
stu[i].num_full = ;
stu[i].isSummit = false;
for (int j = ; j <= k; j++)
{
stu[i].score[j] = -;
}
}
} bool cmp(Student a, Student b)
{
if (a.isSummit != b.isSummit)
{
return a.isSummit > b.isSummit;
}
else if (a.score[] != b.score[])
{
return a.score[] > b.score[];
}
else if (a.num_full != b.num_full)
{
return a.num_full > b.num_full;
}
else
{
return a.id < b.id;
}
}

10-排序5 PAT Judge (25 分)的更多相关文章

  1. 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 ...

  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. PATA1075 PAT Judge (25 分)

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

  4. A1075 PAT Judge (25 分)

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

  5. PTA 5-15 PAT Judge (25分)

    /* * 1.主要就用了个sort对结构体的三级排序 */ #include "iostream" #include "algorithm" using nam ...

  6. 【PAT甲级】1075 PAT Judge (25 分)

    题意: 输入三个正整数N,K,M(N<=10000,K<=5,M<=100000),接着输入一行K个正整数表示该题满分,接着输入M行数据,每行包括学生的ID(五位整数1~N),题号和 ...

  7. A1075 PAT Judge (25)(25 分)

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

  8. PAT甲级:1025 PAT Ranking (25分)

    PAT甲级:1025 PAT Ranking (25分) 题干 Programming Ability Test (PAT) is organized by the College of Comput ...

  9. 1025 PAT Ranking (25分)

    1025 PAT Ranking (25分) 1. 题目 2. 思路 设置结构体, 先对每一个local排序,再整合后排序 3. 注意点 整体排序时注意如果分数相同的情况下还要按照编号排序 4. 代码 ...

随机推荐

  1. Kubernetes管理GPU应用

    目录 简介 GPU驱动 Nvidia-docker Nvidia-device-plugin 在Kubernetes上运行GPU应用 附录 简介 伴随着人工智能技术的发展,机器学习的应用场景越来越广泛 ...

  2. 【计算机组成原理】中央处理器CPU

    一.CPU的功能和基本结构 1.功能 当用计算机解决某个问题是,我们首先必须为他编写程序,程序是一个指令序列,这个序列明确告诉计算机应该执行什么操作,在什么地方找到用来操作的数据,一旦把程序装入内存器 ...

  3. Prometheus PromSQL 获取系统服务运行状态

    Prometheus PromSQL 获取系统服务运行状态 使用systemd收集器:--collector.systemd.unit-whitelist=".+" 从system ...

  4. hadoop格式化:java.io.IOException: Incompatible clusterIDs in /home/lxh/hadoop/hdfs/data: namenode clusterID

    1 概述  解决hadoop启动hdfs时,datanode无法启动的问题.错误为: java.io.IOException: Incompatible clusterIDs in /home/lxh ...

  5. python 练习题:请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串

    # -*- coding: utf-8 -*- # 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串 n1 = 255 n2 = 1000 print(hex(n1)) pr ...

  6. EF启程--概念理解(数据库连接)

    简介:Entity Framework 是一种支持 .NET 开发人员使用 .NET 对象处理数据库的对象关系映射程序 (O/RM). 它不要求提供开发人员通常需要编写的大部分数据访问代码. 其中有E ...

  7. form.submit()提交后返回数据的处理

    form.submit()发送请求一般是单向的,如果需要取返回的数据,一般会发送ajax请求,但是如果form中有附件呢?(以后有时间给大家分享ajax上传附件的功能),确实需要返回数据来知道该功能是 ...

  8. nginx配置ssl证书实现https

    一,环境说明 服务器系统:centos6 服务器IP地址:0.0.0.0 域名:bjubi.com 二,域名解析到服务器 在阿里云控制台-产品与服务-云解析DNS-找到需要解析的域名点“解析”,进入解 ...

  9. 机甲大师S1机器人编程学习

    机甲大师 S1(RoboMaster S1)是大疆新出的教育机器人,很期待.S1支持Scratch和Python编程.(Scratch是麻省理工学院的“终身幼儿园团队”(Lifelong Kinder ...

  10. 【案例】大型摩托制造企业如何高效排产?看APS系统如何帮忙

    江门市大长江集团有限公司(下文简称,大长江集团)创建于1991年11月,是豪爵控股下属子公司. 大长江生产计划管理从最初的电子表格Excel 公式辅助计算,发展到按公司业务需求,利用Excel VBA ...