• 7-41 PAT排名汇总 (25分)--排序


    分别在组内排序,先得出组内的排名。最后总体进行排序,得出总体排名。

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string>
     4 #include <cstdio>
     5 using namespace std;
     6 struct node
     7 {
     8     string num;
     9     int score;
    10     int rank[2];
    11     int place;
    12 };
    13 bool cmp(node a, node b)
    14 {
    15     if (a.score == b.score)
    16         return a.num < b.num;
    17     else
    18         return a.score > b.score;
    19 }
    20 struct node* a = new struct node[30010];
    21 int* front = new int[30010];
    22 int main()
    23 {
    24     int N;
    25     int k = 0;
    26     int sum = 0;
    27     cin >> N;
    28     for (int c = 1; c <= N; c++)
    29     {
    30         int M = 0;
    31         cin >> M;
    32         sum += M;
    33         int value = k - 1;
    34         for (int i = k; i < k + M; i++)
    35         {
    36             a[i].place = c;
    37             cin >> a[i].num;
    38             scanf("%d",&a[i].score);
    39             front[i] = i;
    40         }
    41         sort(a + k, a + k + M, cmp);
    42         for (int i = k; i < k + M; i++)
    43         {
    44             if (i == 0 || a[i].score != a[i - 1].score)
    45                 a[i].rank[0] = i - value;
    46             else
    47             {
    48                 front[i] = front[i - 1];
    49                 int temp = i;
    50                 while (front[temp] != temp)
    51                 {
    52                     temp = temp - 1;
    53                 }
    54                 a[i].rank[0] = temp - value;
    55             }
    56         }
    57         k = k + M;
    58     }
    59     sort(a, a + sum, cmp);
    60     for (int i = 0; i < sum; i++)
    61         front[i] = i;
    62     for (int i = 0; i < sum; i++)
    63     {
    64         if (i == 0 || a[i].score != a[i - 1].score)
    65             a[i].rank[1] = i + 1;
    66         else
    67         {
    68             front[i] = front[i - 1];
    69             int temp = i;
    70             while (front[temp] != temp)
    71             {
    72                 temp = temp - 1;
    73             }
    74             a[i].rank[1] = temp + 1;
    75         }
    76     }
    77     cout << sum << endl;
    78     for (int i = 0; i < sum; i++)
    79     {
    80         printf("%s %d %d %d",a[i].num.c_str(),a[i].rank[1], a[i].place, a[i].rank[0]);
    81         if (i != sum - 1)printf("
    ");
    82     }
    83     delete[]a;
    84     delete[]front;
    85     return 0;
    86 }
  • 相关阅读:
    个人总结05
    微软拼音的用户体验
    个人总结04
    典型用户和用户场景模式
    个人总结03
    个人总结02
    构建之法阅读笔记06
    个人总结01
    学习进度条——第七周
    WebApi学习总结系列第五篇(消息处理管道)
  • 原文地址:https://www.cnblogs.com/2020R/p/12786973.html
Copyright © 2020-2023  润新知