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 (≤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 −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[比较]的更多相关文章

  1. PAT 1075. PAT Judge (25)

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

  2. PAT 1075. PAT Judge

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

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

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

  4. 【转载】【PAT】PAT甲级题型分类整理

    最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ...

  5. PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  6. [PAT] 1141 PAT Ranking of Institutions(25 分)

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  7. PAT 1141 PAT Ranking of Institutions

    After each PAT, the PAT Center will announce the ranking of institutions based on their students' pe ...

  8. PAT甲级1075 PAT Judge

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

  9. PTA(Advanced Level)1075.PAT Judge

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

随机推荐

  1. JavaScript------字符串与HTML格式相互转换

    转载: http://blog.sina.com.cn/s/blog_4cb0b0fc0100aoo1.html 代码:: 1.将字符转换成Html function encodeHtml(str){ ...

  2. Centos下Nagios的安装与配置

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  3. m2014-android->安卓开发在线案例

    1.www.javaapk.com account: 克里斯  pwd: xiaobai 这个网站非常不错,各种例子,各种可供下载演示的项目,用了就知道,好处不多说,真心赞!

  4. canvas一:基本认识

    最近弄数据库弄得头大,想着没事整理一下画布canvas吧,毕竟canvas用途广泛,是html游戏开发必不可少的一环,也是h5新特性中的重中之重 首先canvas是一个html标签,可以给他设置一些c ...

  5. ios Instruments 内存泄露

    本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&p=3 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是 ...

  6. ios学习--TableView详细解释

    -.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTa ...

  7. 《C++ Primer Plus》14.2 私有继承 学习笔记

    C++(除了成员变量之外)还有另一种实现has-a关系的途径——私有继承.使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员.(如果使用保护继承,基类的公有成员和保护成员都将称为派生类的保 ...

  8. 【java】将List中的实体按照某个字段进行分组的算法

    如何将List中存放的实体按照某个字段进行分组呢?来看看下面的例子,假如实体中有个字段叫批次号,我们将具有相同批次号的实体放在一起,那么怎么实现呢?看下面的代码: 可以定义个Map,Map的key用于 ...

  9. go的临时对象池--sync.Pool

    作者:bigtom链接:https://www.jianshu.com/p/2bd41a8f2254來源:简书   一个sync.Pool对象就是一组临时对象的集合.Pool是协程安全的. Pool用 ...

  10. 鼠标聚焦到Input输入框时,按回车键刷新页面原因及解决方法

    参考地址:http://blog.csdn.net/xuezhongsong/article/details/6859037 方式1:全局控制回车,13-回车键,27-ESC,113-F2 docum ...