一、题目
题目描述:
2012伦敦奥运会即将到来,大家都非常关注奖牌榜的情况,现在我们假设奖牌榜的排名规则如下.
1.首先gold medal数量多的排在前面
2.其次silver medal数量多的排在前面
3.然后bronze medal数量多的排在前面
4.若以上三个条件仍无法区分名次,则以国家名称的字典顺序排定 我们假设国家名称不超过二十个字符,各类奖牌数不超过100,且大于0
二、输入输出
输入描述:
第一行输入一个整数N(0<N<21),代表国家数量然后接下来的N行,每行包含1个字符串Name表示各个国家的名称和三个整数Gi.Si,Bi 表示每个获得的aold medal.silver medal.bronze medal的数量,以空格隔开,如(China 51 20 21).
具体见样例输入。
5 China 32 28 34
England 12 34 22
France 23 33 2
Japan 12 34 25
Rusia 23 43 0
输出描述:
输出奖牌榜的依次顺序,只输出国家名称,各占一行,具体见样例输出 China Rusia France Japan England
三、示例
示例1:
输入:
5
China 32 28 34
England 12 34 22
France 23 33 2
Japan 12 34 25
Rusia 23 43 0
输出:
ChinaRusia
France
Japan
England
说明:
无
四、解题思路
自定义排序
五、参考代码
# -*- coding: utf-8 -*-
'''
@File : 2023-B-冠亚军排名-奖牌榜排名.py
@Time : 2023/12/29 18:50:01
@Author : mgc
@Version : 1.0
@Desc : None
'''
import bisect
def print_countries_by_medals(num_countries):
countries = []
for _ in range(num_countries):
name, gold, silver, bronze = input().strip().split()
gold, silver, bronze = -int(gold), -int(silver), -int(bronze)
country_tuple = (gold, silver, bronze, name) # 创建国家元组
bisect.insort(countries, country_tuple) # 将国家元组按奖牌数插入到合适的位置
for country in countries:
print(country[3]) # 输出国家名称
num_countries = int(input().strip()) # 国家数量
print_countries_by_medals(num_countries)