原题链接:PTA | 程序设计类实验辅助教学平台
参考链接:
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))