zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    文本字符集转换
    添加HP消息队列
    fedora19/opensuse13.1 配置svn client
    前端html---介绍前端,标签,列表
    数据分析1
    项目流程
    git 使用
    mongo基础
    linux上面pycharm汉化
    pythonNet 09协程
  • 原文地址:https://www.cnblogs.com/2020R/p/12786973.html
Copyright © 2011-2022 走看看