(python 3)1055 集體照 25分

2021-10-23 18:42:28 字數 1612 閱讀 9692

1055 集體照 (25分)

拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下:

現給定一組拍照人,請編寫程式輸出他們的隊形。

每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n(≤10​4​​,總人數)和 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 個英...