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. 国外大神说:在编程中使用If语句的潜在危险

    大多数编程语言中if语句主要有两个作用:验证输入以保护域免受错误数据的影响,以及处理域内业务逻辑.但是,Udi Dahan最近在阿姆斯特丹DDD欧洲会议上的发言中指出,我们一般很     当我们查看系 ...

  2. IM软件业务知识—导航

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

  3. Java精选笔记_Filter(过滤器)

    Filter(过滤器) Filter入门 什么是Filter Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前 ...

  4. 测试用例和BUG描述规范

    欢迎关注我的公众号,了解更多的测试知识:[软件测试经验与教训] 一一BUG描述基础知识 Bug标题中需包含Bug的具体位置并以[]标注 举例:[模块-子模块-页面]XXXXXXXXXXXX Bug标题 ...

  5. 京东云擎提供了免费的wordpress一键安装功能了

    1. 京东云擎(http://jae.jd.com)提供了免费的个人博客WordPress一键安装功能了,如下图,给开发者分享福利! 免费的应用,提供了源码,提供了数据库: 我之前把文章发到首页,遭到 ...

  6. 百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...

    这是由于导入os文件方式引起 解决办法有两种: 第一种: 弄一个文件夹so/armeabi,把所有的so全部放进去.结构就是so/armeabi/a.so,b.so,c.so 然后压缩这个文件夹成为s ...

  7. 更改嵌入式Linux中开机画面----左上角小企鹅图标

    一直想给嵌入式仪表加个开机LOGO,但是没有找到更换的方法.最近在网上收集了一些文章,整理一下一共自己参考.目前也还没有试过这种方法究竟是否可以.但察看Kernel源代码可以知道,Linux-2.6的 ...

  8. echarts实现柱状图分页展示

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Sql中将字符串按分割符拆分

    创建函数 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create FUNCTION [dbo].[F_Split] ( @SplitString ...

  10. Android 7.1 SystemUI--Multi-Window多窗口模式

    PhoneStatusBar.java private View.OnLongClickListener mRecentsLongClickListener = new View.OnLongClic ...