结构体排序
题目链接:牛客 BGN22 小苯送礼物
第一版,超时了
from functools import cmp_to_key
class struct:
def __init__(self,id,dianzan,shoucang):
self.id = id
self.dianzan = dianzan
self.shoucang = shoucang
self.support = dianzan + shoucang * 2
def cmp(a,b):
if a.support!=b.support:
return a.support - b.support
elif a.shoucang!=b.shoucang:
return a.shoucang - b.shoucang
else:
return a.id - b.id
key_func = cmp_to_key(cmp)
struct_list = []
n,k = map(int,input().split())
for i in range(n):
dianzan,shoucang = map(int,input().split())
struct_list.append(struct(i+1,dianzan,shoucang))
struct_list.sort(key=key_func,reverse=True)
# for item in struct_list:
# print(item.id,item.dianzan,item.shoucang,item.support)
res = []
for i in range(k):
res.append(struct_list[i].id)
res.sort()
for i in res:
print(i,end=" ")
第二版:优化了(更推荐使用)
class Struct:
def __init__(self, id, dianzan, shoucang):
self.id = id
self.dianzan = dianzan
self.shoucang = shoucang
self.support = dianzan + shoucang * 2
struct_list = []
n, k = map(int, input().split())
for i in range(n):
dianzan, shoucang = map(int, input().split())
struct_list.append(Struct(i + 1, dianzan, shoucang))
# 使用元组排序,先按 support 降序,再按 shoucang 降序,最后按 id 升序
# 重要!!!重要!!!!
struct_list.sort(key=lambda x: (-x.support, -x.shoucang, x.id))
# 提取前 k 个元素的 id
res = [item.id for item in struct_list[:k]]
# 对结果进行排序并打印
res.sort()
print(" ".join(map(str, res)))
字典排序?
word_list = input().split(" ")
word_count = {}
for word in word_list:
if word not in word_count:
word_count[word] = 1
else:
word_count[word] += 1
# 把字典转为列表才可以排序
# 按值降序排序,值相同的情况下按键的逆序排序
sorted_word_count = sorted(word_count.items(), key=lambda x: (-x[1], x[0]), reverse=False)
# 打印排序后的结果
for key,value in sorted_word_count:
if value>=3:
print(key)
else:
break
开发中......