zoukankan      html  css  js  c++  java
  • CodeForces 24B F1 Champions(排序)

    B. F1 Champions
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Formula One championship consists of series of races called Grand Prix. After every race drivers receive points according to their final position. Only the top 10 drivers receive points in the following order 25, 18, 15, 12, 10, 8, 6, 4, 2, 1. At the conclusion of the championship the driver with most points is the champion. If there is a tie, champion is the one with most wins (i.e. first places). If a tie still exists, it is chosen the one with most second places, and so on, until there are no more place to use for compare.

    Last year another scoring system was proposed but rejected. In it the champion is the one with most wins. If there is tie, champion is the one with most points. If a tie still exists it is proceeded the same way as in the original scoring system, that is comparing number of second, third, forth, and so on, places.

    You are given the result of all races during the season and you are to determine the champion according to both scoring systems. It is guaranteed, that both systems will produce unique champion.

    Input

    The first line contain integer t (1 ≤ t ≤ 20), where t is the number of races. After that all races are described one by one. Every race description start with an integer n (1 ≤ n ≤ 50) on a line of itself, where n is the number of clasified drivers in the given race. After thatn lines follow with the classification for the race, each containing the name of a driver. The names of drivers are given in order from the first to the last place. The name of the driver consists of lowercase and uppercase English letters and has length at most 50 characters. Comparing of names should be case-sensetive.

    Output

    Your output should contain exactly two line. On the first line is the name of the champion according to the original rule, and on the second line the name of the champion according to the alternative rule.

    Examples
    input
    3
    3
    Hamilton
    Vettel
    Webber
    2
    Webber
    Vettel
    2
    Hamilton
    Vettel
    
    output
    Vettel
    Hamilton
    
    input
    2
    7
    Prost
    Surtees
    Nakajima
    Schumacher
    Button
    DeLaRosa
    Buemi
    8
    Alonso
    Prost
    NinoFarina
    JimClark
    DeLaRosa
    Nakajima
    Patrese
    Surtees
    
    output
    Prost
    Prost
    
    
    结构体排序
    #include <iostream>
    #include <algorithm>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <map>
    #include <string>
    
    using namespace std;
    int n,m;
    struct Node
    {
        int score;
        int r[55];
        string name;
    }a[1005];
    int cmp1(Node a,Node b)
    {
        if(a.score==b.score)
        {
            for(int i=1;i<50;i++)
            {
                if(a.r[i]==b.r[i])
                    continue;
                return a.r[i]>b.r[i];
            }
        }
        return a.score>b.score;
    }
    int cmp2(Node a,Node b)
    {
        if(a.r[1]==b.r[1])
        {
            if(a.score==b.score)
            {
                for(int i=2;i<50;i++)
                {
                    if(a.r[i]==b.r[i])
                        continue;
                    return a.r[i]>b.r[i];
                }
            }
            return a.score>b.score;
        }
        return a.r[1]>b.r[1];
    }
    map<string,int> mm;
    
    int num[55]={0,25,18,15,12,10,8,6,4,2,1};
    int main()
    {
        scanf("%d",&n);
        string s;
        int cnt=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&m);
            for(int j=1;j<=m;j++)
            {
                cin>>s;
                if(!mm.count(s))
                    mm[s]=cnt++;
                a[mm[s]].score+=num[j];
                a[mm[s]].r[j]++;
                a[mm[s]].name=s;
            }
        }
        sort(a,a+cnt,cmp1);
        cout<<a[0].name<<endl;
        sort(a,a+cnt,cmp2);
        cout<<a[0].name<<endl;
        return 0;
    }


  • 相关阅读:
    【Python】小练习
    【C语言】利用二维数组输出成绩
    【C语言】多维数组
    【C语言】输入一个字符串,并对字符串中的偶数位置的字符按从小到大的顺序排序,奇数位置的字符不动,输出排序后的结果
    【C语言】一堆数组中存放了10个小于100的整数,请编程对所有数据按照从小到大的顺序进行排序,若个位数相等,则按照十位从小到大的顺序排序,输出排序后的结果
    【C语言】移动指针
    Python中68个内置函数的总结
    【Python】变量命名习惯
    【Python】 基础语法
    【Python】 注释
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228599.html
Copyright © 2011-2022 走看看