首页 > 试题广场 >

赛季总排名

[编程题]赛季总排名
  • 热度指数:80 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛参加了这个赛季的牛王挑战赛,这个赛季一共有 只队伍参赛,每只队伍都会与其它队伍进行一场三局两胜的较量,赢一大场则大场分数 ,赢一小场则小场分数 ,输一小场则小场分数 ,在所有比赛结束之后,大场得分高的排名靠前,否则小场得分高的排名靠前,特殊的,如果有两支队伍大场、小场得分均相同,那么他们最终排名相同,而在最终排名上出现的次序按照队名字典序顺序。

你为了帮助牛牛预测排名,特意写了一个能够快速排序的算法,牛妹为了测试该算法的正确性,给出了若干组数据。

输入描述:
本题为多组测试数据,第一行输入一个正整数 ,代表测试数据的组数。

对于每个测试数据,第一行输入一个正整数 ,代表参赛战队数量。

接下去 行,每行代表一个战队的赛季对战信息,信息第一行输入一个仅由小写字母组成的字符串 ,两个整数 ,分别代表该战队的队名,大场得分以及小场得分。


输出描述:
对于每个测试数据,在一行内按照赛季总排名从前到后的顺序输出  支战队的队名。
示例1

输入

1
4
nowcoder 2 4
new 1 2
ss 1 2
now 1 2

输出

nowcoder new now ss
自定义排序,感觉应该ac了
T = int(input())
from functools import cmp_to_key
def cmp(a, b):
    if a[1] == b[1] and a[2] == b[2]:
        if a[0] <= b[0]:
            return -1
        else:
            return 1
    elif a[1] == b[1]:
        if a[2] >= b[2]:
            return -1
        else:
            return 1
    else:
        if a[1] >= b[1]:
            return -1
        else:
            return 1
for _ in range(T):
    n = int(input())
    arr = []
    for i in range(n):
        tmp = input().split()
        arr.append([tmp[0], int(tmp[1]), int(tmp[2])])
    ans = sorted(arr, key=cmp_to_key(cmp))
    for j in ans:
        print(j[0], end=' ')


发表于 2021-07-11 21:57:08 回复(0)