题目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");
    }
}
时间: 2024-10-25 08:28:27

题目1007:奥运排序问题(结构体排序)的相关文章

HDU 1084 [What Is Your Grade?] 结构体排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1084 题目大意:共5道题,N个学生.做出5道满分,0道50分.做出1-4道的同学,若在前50%(向下取整),则获得95.85.75.65,若在后50%则获得90.80.70.60. 关键思想:结构体排序 //结构体排序,考虑边界 #include <iostream> #include <algorithm> #include <cmath> #include <me

HDOJ 1009. Fat Mouse&#39; Trade 贪心 结构体排序

FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 56784    Accepted Submission(s): 19009 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats g

HDU 2409 Team Arrangement (结构体排序)

题目链接:HDU 2409 Team Arrangement 题意:给出22个人(编号,名字,踢的位置,在队里的时间),让我们选DD-MM-SS的阵型+一个守门员.在选出队长(时间在最久的就是队长,时间相同编号大为队长),选人的顺序是从编号小的开始. 结构体排序就好了,注意出输出是按队长,D,M,S的顺序,选队长记录队长的编号(而不是下标,我的代码之后还要排序). AC代码: #include<stdio.h> #include<string.h> #include<algo

CodeForces 151 B 结构体排序。

E - 结构体又来了呦 Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 151B Description Winters are just damn freezing cold in Nvodsk! That's why a group of n friends prefers to take a taxi, order

hdu 5702 Solving Order(结构体排序 水题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5702 Solving Order Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 184    Accepted Submission(s): 135 Problem Description Welcome to HDU to take p

JustOj 2039: 成绩排名 (结构体排序)

题目描述 每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差.所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名.(PS:大豪哥班上有个学霸名叫日天,又名泰迪,不要问我为什么,因为泰迪的行为决定的) 输入 多组测试数据,至文件结尾.先输入每个班上有n个同学,这个学期有m门课程(1<=n,m<=100)接下来有n行,每行的输入格式为学号id,姓名name,课程成绩k1,课程成绩k2... ,课程成绩km.(学号在int型范围以内,0<=ki

水果,一道对结构体排序的水题

题目链接:https://vjudge.net/contest/161356#problem/E 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input 第一行正整数N(0<N<=10)表示有N组测试数据. 每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果

Codeforces Round #415 (Div. 2) B. Summer sell-off(贪心+结构体排序)

题目链接:http://codeforces.com/contest/810/problem/B 题意:给定天数和货物可以翻倍的天数,每天都有一定的货物量和顾客数,问怎么样货物才能卖得最多(前一天的货物不会留到下一天,每个顾客只能买一个货物). 简单的贪心问题,贪心策略是:如果两倍的货物量卖出去的更多,就选两倍的,否则就选一倍的. 那一天能卖出去的货物量:min(货物量,顾客数).然后根据结构体排序一下就ok了 1 #include <iostream> 2 #include <algo

【结构体排序】hdu 2409 Team Arrangement

[结构体排序]hdu 2409 Team Arrangement 题目链接:hdu 2409 Team Arrangement 题目大意 给出22个球员的各种信息,要求按照给出的阵形选择球员和队长共11人: 选择球员的规则是:同角色的球员按照编号从小到大选择,直到选够此角色的人数: 选择队长的规则是:在所有已经被选择为某角色的球员中,选择服役时间最长的那个球员, 如果服役时间时间相同,就选择编号较大的那一个球员: 2006 Asia Regional Tehran(伊朗首都德黑兰)的第一题,题意

ACM基础之结构体排序

问题 E: [排序]排名 时间限制: 1 Sec  内存限制: 64 MB 题目描述 班上刚测试了几门课,现在信息技术课的老师要分析一些功课之间的成绩关系,看看每个人的信息技术课成绩排名以及数学课成绩排名,并按信息技术课的成绩从高到低排列,如果两个人的信息技术课成绩相同,则学号小的排在前面.老师把任务交给了信息学最好的你,请你编程完成这个任务. 输入 第1行一个整数N,表示共有N个同学的成绩(1≤N≤45):后面有N行,每行4个整数,分别表示一个同学的:语文.数学.英语.信息技术成绩(成绩C:0