题目1007:奥运排序问题(结构体排序)

Posted AlvinZH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目1007:奥运排序问题(结构体排序)相关的知识,希望对你有一定的参考价值。

题目链接:http://ac.jobdu.com/problem.php?pid=1007

详解连接:https://github.com/Pacsiy/JobDu

参考代码:

//
// Created by AlvinZH on 2017/4/29.
// Copyright (c) AlvinZH. All rights reserved.
//
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;

typedef struct Country{
    int id;
    int gold;
    int sum;
    int pop;

    double gp;//金牌人口比例
    double sp;//奖牌人口比例

    int R[5];

    Country(int a,int b,int c)
    {
        gold=a;sum=b;pop=c;
        gp=(double)a/c;
        sp=(double)b/c;
    }
}Country;

vector<Country> ALL;
vector<Country> C;

bool cmp1(Country a,Country b)
{
    return a.gold>b.gold;
}
bool cmp2(Country a,Country b)
{
    return a.sum>b.sum;
}
bool cmp3(Country a,Country b)
{
    return a.gp>b.gp;
}
bool cmp4(Country a,Country b)
{
    return a.sp>b.sp;
}
bool cmp5(Country a,Country b)
{
    return a.id<b.id;
}

int main()
{
    int n,m;
    while(~scanf("%d %d",&n,&m))
    {
        ALL.clear();
        C.clear();
        int a,b,c;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            ALL.push_back(Country(a,b,c));
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d",&a);
            C.push_back(ALL[a]);
            C[i].id=i;
        }

        sort(C.begin(),C.end(),cmp1);
        for(int i=0;i<n;i++)
        {
            int rank=i;
            while(rank>0&&C[i].gold==C[rank-1].gold)
                rank--;

            C[i].R[1]=rank+1;
        }
        sort(C.begin(),C.end(),cmp2);
        for(int i=0;i<n;i++)
        {
            int rank=i;
            while(rank>0&&C[i].sum==C[rank-1].sum)
                rank--;

            C[i].R[2]=rank+1;
        }
        sort(C.begin(),C.end(),cmp3);
        for(int i=0;i<n;i++)
        {
            int rank=i;
            while(rank>0&&C[i].gp==C[rank-1].gp)
                rank--;

            C[i].R[3]=rank+1;
        }
        sort(C.begin(),C.end(),cmp4);
        for(int i=0;i<n;i++)
        {
            int rank=i;
            while(rank>0&&C[i].sp==C[rank-1].sp)
                rank--;

            C[i].R[4]=rank+1;
        }
        sort(C.begin(),C.end(),cmp5);
        for(int k=0;k<m;k++)
        {
            int choice=1;
            int rank=C[k].R[1];
            for(int i=1;i<=4;i++)
            {
                if(C[k].R[i]<rank)
                {
                    choice=i;
                    rank=C[k].R[i];
                }
            }
            printf("%d:%d\n",rank,choice);
        }
        printf("\n");
    }
}

 

以上是关于题目1007:奥运排序问题(结构体排序)的主要内容,如果未能解决你的问题,请参考以下文章

1007.奥运排序问题

7-17 奥运排行榜 (25 分)

Java-POJ1007-DNA Sorting

题目1013:开门人和关门人(结构体自定义cmp排序)

题目1014:排名(结构体排序)

C语言-对一个结构体中的字段进行排序