• PAT Ranking (排名)


    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 <iostream>
      2 
      3 #include <string>
      4 
      5 #include <algorithm>
      6 
      7 #include <vector>
      8 
      9 using namespace std;
     10 
     11  
     12 
     13 struct stu
     14 
     15 {
     16 
     17    int loc,frank,lrank,gra;
     18 
     19    string name;
     20 
     21 };
     22 
     23  
     24 
     25  
     26 
     27 bool cmp(stu s1,stu s2)
     28 
     29 {
     30 
     31     if(s1.frank==s2.frank)
     32 
     33     return s1.name<s2.name;
     34 
     35  
     36 
     37       return s1.frank<s2.frank;
     38 
     39 }
     40 
     41  
     42 
     43 bool cmpg(stu s1,stu s2)
     44 
     45 {
     46 
     47  
     48 
     49       return s1.gra>s2.gra;
     50 
     51 }
     52 
     53  
     54 
     55 int main()
     56 
     57 {
     58 
     59  
     60 
     61   int n;int k;int rank,count;
     62 
     63   int i,j;
     64 
     65     while(cin>>n)
     66 
     67   {
     68 
     69       vector<stu> total;
     70 
     71      for(i=1;i<=n;i++)
     72 
     73      {
     74 
     75          cin>>k;
     76 
     77             vector<stu> s(k);
     78 
     79         for(j=0;j<k;j++)
     80 
     81             {
     82 
     83                cin>>s[j].name>>s[j].gra;
     84 
     85                s[j].loc=i;
     86 
     87             }
     88 
     89             sort(s.begin(),s.end(),cmpg);
     90 
     91             count=1;
     92 
     93             s[0].lrank=1;
     94 
     95             total.push_back(s[0]);
     96 
     97             for(j=0;j<k-1;j++)
     98 
     99             {
    100 
    101                   if(s[j].gra==s[j+1].gra)
    102 
    103                   {
    104 
    105                         s[j+1].lrank=s[j].lrank;
    106 
    107                         count++;
    108 
    109                   }
    110 
    111                   else
    112 
    113                   {
    114 
    115                       s[j+1].lrank=s[j].lrank+count;
    116 
    117                         count=1;
    118 
    119                   }
    120 
    121                   total.push_back(s[j+1]);
    122 
    123             }
    124 
    125      }
    126 
    127  
    128 
    129           sort(total.begin(),total.end(),cmpg);
    130 
    131           count=1;
    132 
    133             total[0].frank=1;
    134 
    135             for(j=0;j<total.size()-1;j++)
    136 
    137             {
    138 
    139                   if(total[j].gra==total[j+1].gra)
    140 
    141                   {
    142 
    143                         total[j+1].frank=total[j].frank;
    144 
    145                         count++;
    146 
    147                   }
    148 
    149                   else
    150 
    151                   {
    152 
    153                       total[j+1].frank=total[j].frank+count;
    154 
    155                         count=1;
    156 
    157                   }
    158 
    159             }
    160 
    161  
    162 
    163             sort(total.begin(),total.end(),cmp);
    164 
    165             cout<<total.size()<<endl;
    166 
    167             for(i=0;i<total.size();i++)
    168 
    169                   cout<<total[i].name<<" "<<total[i].frank<<" "<<total[i].loc<<" "<<total[i].lrank<<endl;
    170 
    171    
    172 
    173   }
    174 
    175   return 0;
    176 
    177 }
    178 
    179  
    View Code
  • 相关阅读:
    virtual
    微软MBS intern笔试
    Ubuntu Linux Green hand
    Coding style
    abstract
    Jquery Ajax请求标准格式
    Hashtable的简单实用
    C#中GET和POST的简单区别
    WIN7 64位机与32位机有什么区别
    一个加密解密类
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/4240614.html
Copyright © 2020-2023  润新知