PAT 1075 PAT Judge[比较]
1075 PAT Judge (25 分)
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 -
题目大意:输入包括n个学生,编号从00001到N,包括K个题目,m次提交,对它们进行排序:
1.一个学生多次对一个题目提交,要取分数最高的一次;
2.如果一个学生没有提交过,或者是提交了均未通过编译,也就是输入未-1,那么不计入统计中,注意:这里提交了得分为0,和-1是不一样的,前者是通过了编译但是得分为0,后者是未通过编译。
我的AC:
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std; struct Stu{
int id,total,perfect,pass;//pass记录通过编译的题目数,如果为0,那么不进入list。
int task[];//先存上5道题的数组。
Stu(){
fill(task,task+,-);
total=;perfect=;pass=;
}
}stu[];
int score[];
vector<Stu> vt;
bool cmp(Stu&a,Stu&b){
if(a.total>b.total)return true;
else if(a.total==b.total&&a.perfect>b.perfect)return true;
else if(a.total==b.total&&a.perfect==b.perfect) return a.id<b.id;
return false;
}
int main() {
int n,k,m;
cin>>n>>k>>m;
for(int i=;i<=k;i++){
cin>>score[i];
}
int id,tid,sco;
for(int i=;i<m;i++){
cin>>id>>tid>>sco;
if(sco!=-)stu[id].pass+=;//此处只要!=0就可以计入排序。
if(sco==-)sco=;
stu[id].task[tid]=max(sco,stu[id].task[tid]);//分数每次都取最高的那个。
stu[id].id=id;
//提交多次的要取得分最高的那次。
// if(sco!=-1)
// stu[id].total+=sco;
// if(sco==score[tid])//AC数目也不能在这里判断,有可能会多次AC
// stu[id].perfect+=1;//记录AC的题目数。
}
for(int i=;i<=n;i++){
for(int j=;j<=k;j++){
if(stu[i].task[j]!=-)
stu[i].total+=stu[i].task[j];
if(stu[i].task[j]==score[j])
stu[i].perfect+=;
}
if(stu[i].pass!=){
vt.push_back(stu[i]);
}
}
sort(vt.begin(),vt.end(),cmp);
int rank=;
printf("1 %05d %d",vt[].id,vt[].total);
for(int i=;i<=k;i++){
if(vt[].task[i]==-)
printf(" -");
else
printf(" %d",vt[].task[i]);
}
printf("\n");
for(int i=;i<vt.size();i++){
if(vt[i].total!=vt[i-].total){
rank=i+;
}
printf("%d %05d %d",rank,vt[i].id,vt[i].total);
for(int j=;j<=k;j++){
if(vt[i].task[j]==-)
printf(" -");
else
printf(" %d",vt[i].task[j]);
}
printf("\n");
}
return ;
}
//总体来说就是根据题目的要求来写,整个过程思路清晰的话,还是比较简单的。
PAT 1075 PAT Judge[比较]的更多相关文章
- PAT 1075. PAT Judge (25)
题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1075 此题主要考察细节的处理,和对于题目要求的正确理解,另外就是相同的总分相同的排名的处理一定 ...
- PAT 1075. PAT Judge
The ranklist of PAT is generated from the status list, which shows the scores of the submittions. Th ...
- PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)
1075 PAT Judge (25分) The ranklist of PAT is generated from the status list, which shows the scores ...
- 【转载】【PAT】PAT甲级题型分类整理
最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ...
- PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...
- [PAT] 1141 PAT Ranking of Institutions(25 分)
After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...
- PAT 1141 PAT Ranking of Institutions
After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...
- PAT甲级1075 PAT Judge
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805393241260032 题意: 有m次OJ提交记录,总共有k道 ...
- PTA(Advanced Level)1075.PAT Judge
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...
随机推荐
- three.js obj转js
js格式的模型文件是three.js中可以直接加载的文件.使用THREE.JSONLoader()直接加载,而不需要引用其它的loader插件. obj格式转js格式使用的是threejs.org官方 ...
- python--dict和set类型--4
原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 一.什么是dict 我们已经知道,list 和 tuple 可以用来表示顺序集合,例如,班里同学 ...
- hdu 5038 水题 可是题意坑
http://acm.hdu.edu.cn/showproblem.php?pid=5038 就是求个众数 这个范围小 所以一个数组存是否存在的状态即可了 可是这句话真恶心 If not all ...
- JAVA语言基础内部测试题(50道选择题)
JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...
- swift - 表格的编辑功能(添加、删除)
表格(tableview)的确是一个很好用的控件,现在来实现一个编辑功能的实现,包含添加和删除,删除包括长按删除和左滑删除 效果图如下: 具体代码如下: 1.创建表格(这个表格有2个区,有区头和区尾) ...
- swift - UIImageView 的使用
1.创建 var imageView = UIImageView()//初始化 2.图片的显示及图片的改变 imageView = UIImageView(image: UIImage(named: ...
- PHP - PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置(转)
原文地址:http://www.cr173.com/html/66775_1.html PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助 ...
- 【转】实现Ribbon风格的窗体
随着office2007的兴起,微软让我们看到了Ribbon风格的窗体,现在很多软件也都开始使用Ribbon风格.那么我们如果要自己开发,应当怎么做呢?本文就是为大家解开这个疑团的. 首先,Delph ...
- LeetCode——Palindrome Linked List
Description: Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it ...
- 使用openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...