拍集體照時隊形很重要,這裡對給定的 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
思路:
先按身高從大到小,姓名公升序排好順序,直接定義排序規則即可
將最後一排,和前面排分開考慮
按每一排的人數,用奇偶數的形式來判斷插入左邊還是插入右邊,並且記錄插入位置距中心的偏離,另一種方法就是採用雙端佇列
注意:
注意k是排數,raw_num才是一排的人數
注意可以使用雙端佇列deque,但本次**使用陣列方式
**:(c++)
#include
#include
#include
using
namespace std;
struct person
;bool
cmp(person a, person b)
intmain()
sort
(p.begin()
, p.
end(
), cmp)
;int raw_num = n/k;
//raw_num才是一行應該排的人數
int last_num = n - raw_num*k;
// 輸出最後一排
string str[raw_num+last_num]
;int middle =
(raw_num+last_num)/2
; str[middle]
= p[0]
.name;
//選擇最大的
int s =1;
//奇數放右邊,偶數放左邊
int t =1;
for(
int i=
1; i)else
}for
(int j=
0; j) cout
int i=raw_num+last_num; i=raw_num)
else
}for
(int j=
0; j) cout<}return0;
}
PAT乙級1055 集體照 25分
1055 集體照 25分 拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下 現給定一組拍照人,請編寫程式輸出他們的隊形。每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n 總人數 和 k 總排數 隨後 n 行,每行給出乙個人的名字 不包含空格 長度不超過...
PAT乙級 1055 集體照 25
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 拍集體照時隊形很重要,這裡對給定的n個人k排的隊形設計排隊規則如下 現給定一組拍照人,請編寫程式輸出他們的隊形。輸入格式 每個輸入包含1個測試用例。每個測試用例第1行給出...
PAT乙級1055 集體照 25
拍集體照時隊形很重要,這裡對給定的n個人k排的隊形設計排隊規則如下 每排人數為n k 向下取整 多出來的人全部站在最後一排 後排所有人的個子都不比前排任何人矮 每排中最高者站中間 中間位置為m 2 1,其中m為該排人數,除法向下取整 每排其他人以中間人為軸,按身高非增序,先右後左交替入隊站在中間人的...