【PAT_Python解】1055 集体照

原题链接:PTA | 程序设计类实验辅助教学平台

参考链接:

【Python】 1055 集体照 (25 分)_名人合影 python-CSDN博客

Tips:多学习其他大佬的AC代码!

n, k = map(int, input().split())

m = n//k    #每排人数
r = n%k     #出来的人全部站在最后一排

L=[] #存储输入的数据
for i in range(n):
    x = input().split()
    L.append([x[0], int(x[1])])

#先按照姓名,再按照身高排序,因为题目要求姓名排序时按照升序,必须分别排序
L.sort(key=lambda x: x[0], reverse=True)
L.sort(key=lambda x: x[1])

ans=[] #初步按照每排身高由高到低站好
for i in range(k):
    rank=[]; t=(i+1)*m-1
    for j in range(m):
        rank.append(L[t][0])
        t-=1
    if i==k-1 and i!=0 and r!=0:    #最后一排 and 不止一排 and 有剩余的人
        for e in L[-r:]:
            rank.insert(0, e[0])
    ans.append(rank)

#按照以中间人为轴,按身高非增排序
for i in range(k)[::-1]:    #按样例从ans最后一排[::-1]开始输出
    name=[]
    name.append(ans[i][0]) #这里列表可以按照append和insert来模拟题目要求的左右排序
    for j in range(1,len(ans[i])):
        if j%2==1:
            name.insert(0, ans[i][j])
        else:
            name.append(ans[i][j])
    print(" ".join(name))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新时代先锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值