zoukankan      html  css  js  c++  java
  • A1025. PAT Ranking

    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.

    Input Specification:

    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.

    Output Specification:

    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.

    Sample Input:

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

    Sample Output:

    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

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<string.h>
     5 using namespace std;
     6 typedef struct{
     7     char regist[15];
     8     int final_rank;
     9     int location;
    10     int local_rank;
    11     int grade;
    12 }info;
    13 bool cmp(info a, info b){
    14     if(a.grade != b.grade)
    15         return a.grade > b.grade;
    16     else
    17         return strcmp(a.regist, b.regist) < 0;
    18 }
    19 int main(){
    20     int N, K, head = 0, rear = 0;
    21     info students[30001];
    22     scanf("%d", &N);
    23     for(int i = 0; i < N; i++){
    24         scanf("%d", &K);
    25         head = rear;
    26         for(int j = 0; j < K; j++){
    27             scanf("%s%d",students[rear].regist, &(students[rear].grade));
    28             students[rear].location = i + 1;
    29             rear++;
    30         }
    31         sort(students + head, students + rear, cmp);
    32         students[head].local_rank = 1;
    33         for(int j = 1; j < K; j++){
    34             if(students[head + j].grade == students[head + j - 1].grade)
    35                 students[head + j].local_rank = students[head + j - 1].local_rank;
    36             else
    37                 students[head + j].local_rank = j + 1;
    38         }
    39     }
    40     sort(students, students + rear, cmp);
    41     students[0].final_rank = 1;
    42     printf("%d
    ", rear);
    43     printf("%s %d %d %d
    ", students[0].regist, students[0].final_rank, students[0].location, students[0].local_rank);
    44     for(int i = 1; i < rear; i++){
    45         if(students[i].grade == students[i - 1].grade)
    46             students[i].final_rank = students[i - 1].final_rank;
    47         else
    48             students[i].final_rank = i + 1;
    49         printf("%s %d %d %d
    ", students[i].regist, students[i].final_rank, students[i].location, students[i].local_rank);
    50     }
    51     cin >> N;
    52     return 0;
    53 }
    View Code

    总结:

    1、题目要求:按照最终排名的非降序排列,如果最终排名相同,则按照id的非降序排列。由样例可知,分数相同的人排名相同,但相同排名的人均会占一个位置(如有3个人并列第一, 则第四个人排名为第四而非第二)。

    2、依旧使用struct记录学生成绩和信息。使用sort函数来排序。sort(首元素地址,尾元素的下一个地址,cmp函数),如排序a[0]~a[5],应填sort(a, a + 6, cmp)。在cmp函数中, 如果需要降序排序,则 return a > b,反之亦然。

    3、字符串比较大小,可以使用strcmp(a, b),若a < b,返回负数,a = b返回0,a > b,返回正数。需要include <string.h>。

  • 相关阅读:
    迅为i.MX8M开发板Linux安卓9.0系统,四核CortexA53,单核CortexM4
    迅为龙芯2K1000开发板虚拟机ubuntu安装SSH服务
    迅为i.MX8MM开发板虚拟机Vmware的安装
    迅为龙芯2K1000开发板虚拟机ubuntu安装vscode
    归并排序XCoderLiu
    关于API中窗口子类化及超类化整理
    STL中最流行类模板vector
    andbook
    Navigation Failed: Cannot Find Application\HTML\1033\default.htm 错误解决办法
    html 播放音乐
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/8448767.html
Copyright © 2011-2022 走看看