1055 集體照 (25分)
拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下:
現給定一組拍照人,請編寫程式輸出他們的隊形。
每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n(≤104,總人數)和 k(≤10,總排數)。隨後 n 行,每行給出乙個人的名字(不包含空格、長度不超過 8 個英文本母)和身高([30, 300] 區間內的整數)。
輸出拍照的隊形。即k排人名,其間以空格分隔,行末不得有多餘空格。注意:假設你面對拍照者,後排的人輸出在上方,前排輸出在下方。
10 3
tom 188
mike 170
eva 168
tim 160
joe 190
ann 168
bob 175
nick 186
amy 160
john 159
bob tom joe nick
ann mike eva
tim amy john
此題思路是:先將所有的人排序之後,再按輸出順序分組,然後分別對每一組的人進行排位。
排位時,首先確定最高者所站的位置,然後不斷按照先左後右的順序插入人,直到這一組的人都分到了具體的位置。
**:
n,k=map(int,input().split(' '))
personnel=
result=
#輸入#input
for i in range(n):
#對高度和姓名進行排序
#sort by height and name
personnel=sorted(personnel,key=lambda x:(-int(x[1]),x[0]),reverse=true)
a=n//k
b=n-a*(k-1)
#對拍照者分組
#group people to be photographed
for j in range(k,0,-1):
if j==k:
c=personnel[(j-1)*a:]
c.reverse()
else:
c=personnel[(j-1)*a:j*a]
c.reverse()
#依次對每組進行插入排位
#insert and rank each group in turn
for m in result:
length=len(m)
flag=length//2
middle=flag
c=[' ']*length
c[middle]=m[0][0]
use=1
for z in range(1,flag+1):
if (middle-z)>=0:
c[middle-z]=m[use][0]
use=use+1
if (middle+z)c[middle+z]=m[use][0]
use=use+1
#按格式輸出
#output in format
print(*c)
python3 1055 集體照 25分
題目如下 後排所有人的個子都不比前排任何人矮 每排中最高者站中間 中間位置為m 2 1,其中m為該排人數,除法向下取整 每排其他人以中間人為軸,按身高非增序,先右後左交替入隊站在中間人的兩側 例如5人身高為190 188 186 175 170,則隊形為175 188 190 186 170。這裡假...
1055 集體照 (25 分)
拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下 現給定一組拍照人,請編寫程式輸出他們的隊形。每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n 10 4 總人數 和 k 10,總排數 隨後 n 行,每行給出乙個人的名字 不包含空格 長度不超過 8 個英...
1055 集體照 25 分
拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下 現給定一組拍照人,請編寫程式輸出他們的隊形。每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n 10 4 總人數 和 k 10,總排數 隨後 n 行,每行給出乙個人的名字 不包含空格 長度不超過 8 個英...