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>。

  • 相关阅读:
    MVC上传文件并模拟进度条
    C#文件的压缩和解压(ZIP)使用DotNetZip封装类操作zip文件(创建/读取/更新)实例
    Inherits、CodeFile、CodeBehind的区别
    .csproj文件的配置 IIS可以调试
    C# <%@ Register %>指令
    将n行3列的数据dataTable装换成m行7列的dataTable
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40
    Js全选,插入实现
    Jquery autocomplete插件的使用
    jquery.autocomplete自动补全功能
  • 原文地址:https://www.cnblogs.com/zhuqiwei-blog/p/8448767.html
Copyright © 2011-2022 走看看