题目描述

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. 在Postman脚本中发送请求(pm.sendRequest)

    Postman的Collection(集合)/Folder(集合的子文件夹)/Request(请求)都有Pre-request script和Tests两个脚本区域, 分别可以在发送请求前和请求后使用 ...

  2. CF1204C

    CF1204C-Anna, Svyatoslav and Maps 题意: 题目传送门 不想说了,阅读题. 解法: 先用floyd跑出各顶点间的最短路.把p(1)加入答案,然后沿着题目给的路径序列遍历 ...

  3. Vue.js 生命周期、计算属性及侦听器

    一.创建一个Vue实例 每个Vue应用都是使用Vue函数创建一个Vue实例.所有的Vue组件都是一个Vue实例,并且接受相同的选项对象(一些根实例特有的选项除外). 数据和方法 当一个实例被创建后,它 ...

  4. php中pack、unpack的详细用法

    详见: https://segmentfault.com/a/1190000008305573?utm_source=tag-newest

  5. android data binding jetpack VIII BindingConversion

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  6. LC 593. Valid Square

    Given the coordinates of four points in 2D space, return whether the four points could construct a s ...

  7. 使用IEDriverServer.exe驱动IE,实现自动化测试

    1. 下载IEDriverServer: https://www.nuget.org/packages?q=IEDriver 2. 解压缩得到IEDriverServer.exe和IEDriverSe ...

  8. [Kerberos] Kerberos教程(一)

    1 简介 Kerberos协议旨在通过开放和不安全的网络提供可靠的身份验证,其中可能拦截属于它的主机之间的通信.但是,应该知道,如果使用的计算机容易受到攻击,Kerberos不提供任何保证:身份验证服 ...

  9. c语言求素数以及改进算法

    代码需要使用c99编译 #include <stdio.h> #include <stdlib.h> #include <math.h> //是否为素数 //从2到 ...

  10. UIView和UIWindow的使用

    1.创建窗口: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [N ...