python 1055 集体照 (25 分)

本文深入探讨了一种用于处理人员排序与分组的算法,该算法首先读取输入的人数和组数,然后收集每个人的姓名和身高信息,通过字典存储并按身高降序、姓名字典序进行排序。接着,算法将人员平均分配到各组中,并确保每组的中间位置由特定的人员占据,最后输出每个组的成员名单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

n,k = map(int,input().split(" "))
p_dict = {}
for i in range(n):
    name,height = map(str,input().split(" "))
    p_dict[name] = int(height)
pai_num = n//k          #计算每排人数
pai_middle = pai_num//2+1-1        #计算每排中间位置
finall_num = pai_num + n%k      #计算最后一排人数
f_middle = finall_num//2+1-1       #计算最后一排中间位置
pai_list = []
pai_list.append(finall_num)
for i in range(k-1):
    pai_list.append(pai_num)

p_dict_list = sorted(p_dict.items(),key=lambda a:(-a[1],a[0]))       #按身高降序排列,若多人身高相同,则按名字的字典序升序排列。
t = 0
for i in pai_list:
    x = 1
    list1 = ["" for k in range(i)]
    if t == 0:
        list1[f_middle] = p_dict_list[t][0]
        middle_num = f_middle
    else:
        list1[pai_middle] = p_dict_list[t][0]
        middle_num = pai_middle
    t += 1
    for j in range(int(i/2)):
        try:
            list1[middle_num-x] = p_dict_list[t][0]
            t += 1
            list1[middle_num+x] = p_dict_list[t][0]
            x,t = x+1,t+1
        except:
            break
    print(" ".join(list1))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值