1055 集體照 (25分)
拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下:
每排人數為 n/k(向下取整),多出來的人全部站在最後一排;
後排所有人的個子都不比前排任何人矮;
每排中最高者站中間(中間位置為 m/2+1,其中 m 為該排人數,除法向下取整);
每排其他人以中間人為軸,按身高非增序,先右後左交替入隊站在中間人的兩側(例如5人身高為190、188、186、175、170,則隊形為175、188、190、186、170。這裡假設你面對拍照者,所以你的左邊是中間人的右邊);
若多人身高相同,則按名字的字典序公升序排列。這裡保證無重名。
現給定一組拍照人,請編寫程式輸出他們的隊形。
輸入格式:
每個輸入包含 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
解題思路:題目中每排要求的排列方式可以用雙端佇列實現,先在前端插入,然後在後端插入,最後輸出從最後一排到第一排的人即可
#include
#include
#include
#include
#include
#include
using
namespace std;
struct person
;bool
cmp(person p1, person p2)
else
}person x[
10050];
intmain()
sort
(begin
(x),
begin
(x)+ n, cmp)
;for
(int i =
1; i < k; i++
)else
} p.
push_back
(queue);}
deque last;
for(
int j = n -
1, m =
0; j >=
(k -1)
*n / k; j--
, m++
)else
} p.
push_back
(last)
;for
(int i = k -
1; i >=
0; i--
) cout << p[i]
[j];
} cout << endl;
}return0;
}
PAT乙級1032 C 龍哥哥的刷題路
1032 挖掘機技術哪家強 20分 為了用事實說明挖掘機技術到底哪家強,pat 組織了一場挖掘機技能大賽。現請你根據比賽結果統計出技術最強的那個學校。輸入格式 輸入在第 1 行給出不超過 10 5的正整數 n,即參賽人數。隨後 n 行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編號 從 1...
PAT乙級1038 C 龍哥哥的刷題路
1038 統計同成績學生 20分 本題要求讀入 n 名學生的成績,將獲得某一給定分數的學生人數輸出。輸入格式 輸入在第 1 行給出不超過 10 5的正整數 n,即學生總人數。隨後一行給出 n 名學生的百分制整數成績,中間以空格分隔。最後一行給出要查詢的分數個數 k 不超過 n 的正整數 隨後是 k ...
PAT乙級1042 C 龍哥哥的刷題路
1042 字元統計 20分 請編寫程式,找出一段給定文字 現最頻繁的那個英文本母。輸入格式 輸入在一行中給出乙個長度不超過 1000 的字串。字串由 ascii 碼表中任意可見字元及空格組成,至少包含 1 個英文本母,以回車結束 回車不算在內 輸出格式 在一行中輸出出現頻率最高的那個英文本母及其出現...