题目描述

Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it is your job to write a program to correctly merge all the ranklists and generate the final rank.

输入格式

Each input file contains one test case. For each case, the first line contains a positive number N (≤100), the number of test locations. Then N ranklists follow, each starts with a line containing a positive integer K (≤300), the number of testees, and then K lines containing the registration number (a 13-digit number) and the total score of each testee. All the numbers in a line are separated by a space.

输出格式

For each test case, first print in one line the total number of testees. Then print the final ranklist in the following format:

                registration_number final_rank location_number local_rank

The locations are numbered from 1 to N. The output must be sorted in nondecreasing order of the final ranks. The testees with the same score must have the same rank, and the output must be sorted in nondecreasing order of their registration numbers.

输入样例

2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85

输出样例

9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

全部AC

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
//p115
using namespace std; const int maxn = 30010; struct Student {
char registration_number[20]; //考生id
int score; //考生成绩
int final_rank; //最终排名
int location_number; //考室号
int local_rank; //考室排名
}stu[maxn]; bool cmp(Student A, Student B) {
if(A.score != B.score) return A.score > B.score; //AB成绩不同,按成绩从大到小排序
else if(A.score == B.score) return strcmp(A.registration_number, B.registration_number) < 0; //AB成绩相同,则按照准考证从小到大排序
} int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE}
int N; //考室数量
scanf("%d", &N);
int a = 0; //初始化考生存储位置
for(int i = 0; i < N; i++) {
int K; //考室中考生的数量
scanf("%d", &K);
//输入各个考室考生的注册号和成绩
for(int j = 0; j < K; j++) {
stu[a].location_number = i + 1;
scanf("%s %d", stu[a].registration_number, &stu[a].score);
a++;
}
}
//初始化每个教室排名
int lrank[N+1] = {0};
int lrealrank[N+1] = {0};
//memset(lrank, 1, N+1);
//按考生成绩从大到小排序
sort(stu, stu+a, cmp);
int rank = 1; //总排名
for(int i = 0; i < a; i++) {
//printf("registration_number:%s location_number:%d score:%d \n", stu[i].registration_number, stu[i].location_number, stu[i].score);
//总排名
if(i == 0) stu[i].final_rank = rank;
else if(i != 0 && stu[i].score == stu[i-1].score) stu[i].final_rank = stu[i-1].final_rank;
else if(stu[i].score < stu[i-1].score) stu[i].final_rank = ++rank;
rank = i+1; //更新总排名
//教室排名
if(i != 0 && stu[i].score == stu[i-1].score && stu[i].location_number == stu[i-1].location_number) { //在同个教室中分数相同
stu[i].local_rank = stu[i-1].local_rank;
lrealrank[stu[i].location_number]++;
} else {
stu[i].local_rank = lrank[stu[i].location_number]; //在同个教室中分数不相同
lrank[stu[i].location_number]++;
lrealrank[stu[i].location_number]++;
}
lrank[stu[i].location_number] = lrealrank[stu[i].location_number];
}
printf("%d\n", a);
for(int i = 0; i < a; i++) {
printf("%s %d %d %d\n", stu[i].registration_number, stu[i].final_rank, stu[i].location_number, stu[i].local_rank+1);
}
return 0;
}

PAT A1025 PAT Ranking(25)的更多相关文章

  1. PAT A1025 pat ranking

    有n个考场,每个考场都有若干数量个考生,现给出各个考场中考生的准考证号和分数,要求将所有考生的分数从高到低排序,并输出 #include<iostream> #include<str ...

  2. A1025 PAT Ranking (25)(25 分)

    A1025 PAT Ranking (25)(25 分) Programming Ability Test (PAT) is organized by the College of Computer ...

  3. pat1025. PAT Ranking (25)

    1025. PAT Ranking (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Programmi ...

  4. 1025 PAT Ranking (25分)

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

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

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

  6. PAT A1141 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(25 分)

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

  8. PAT 1085 PAT单位排行(25)(映射、集合训练)

    1085 PAT单位排行(25 分) 每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整数 N(≤10​5​​),即考生人数.随 ...

  9. PTA PAT排名汇总(25 分)

    PAT排名汇总(25 分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科 ...

随机推荐

  1. 初步学习HashTable(哈希表或者散列链表)

    初次接触哈希表,我谈谈自己对哈希表的一些理解,可能有误,还望指正. 对于哈希表,存放的数据是键值对<key,value>.是按照键值来索引的,键key可以是字符串.单个字符.整形数等,值v ...

  2. javascript中的类型转换,宽松相等于严格相等

    为了将值转换为基本类型值(string,number,boolean,null,undefined),抽象操作ToPrimitive会首先检查该值有没有valueOf()方法,如果有并且返回基本类型值 ...

  3. JS基础_数组的方法

    常用的方法 1.push:向数组的末尾添加一个或更多元素,并返回新的长度. 将要添加的元素作为方法的参数传递,这些元素将会自动添加到数组的末尾 var a=[1,2,3]; var r = a.pus ...

  4. 【SQL】 java.sql.SQLException: You can't specify target table 'emp' for update in FROM clause

    在执行sql: delete from emp where id in (select id from emp where cdate<'2018-02-02') 时报出以下异常: ### Th ...

  5. 最新create-react-native-app搭建rn教程

    一.前置条件: 1.nodeJS环境 2.npm 3.yarn 二.安装及项目初始化 1.安装脚手架 npm install -g create-react-native-app 2.用脚手架初始化创 ...

  6. 在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

    1)  在默认情况下,springmvc不能将String类型转成java.util.Date类型,所有我们只能在Action 中自定义类型转换器 <form action="${pa ...

  7. 语法错误 : 缺少“;”(在“<”的前面)

    该错误有可能是由错误所指行“<”附近的某个类型忘记#include <>所造成的

  8. 数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程

    目录 文章目录 目录 前言 数据包从物理网卡进入虚拟机的流程 物理网卡处理 如何将网卡收到的数据写入到内核内存? 中断下半部分软中断处理 数据包在内核态 OvS Bridge(Datapath)中的处 ...

  9. linux备忘和卸载

    linux上网 -------------------------------------------------linux卸载------------------------------------ ...

  10. 一百一十九:CMS系统之将短信验证码和图形验证码放到memcached缓存中

    将两个验证码的视图都放到common蓝图下 from flask import Blueprint, request, make_responsefrom exts import alidayufro ...