PAT乙級1055 集體照 25

2021-08-14 18:28:52 字數 1647 閱讀 7292

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

每排人數為n/k(向下取整),多出來的人全部站在最後一排;

後排所有人的個子都不比前排任何人矮;

每排中最高者站中間(中間位置為m/2+1,其中m為該排人數,除法向下取整);

每排其他人以中間人為軸,按身高非增序,先右後左交替入隊站在中間人的兩側(例如5人身高為190、188、186、175、170,則隊形為175、188、190、186、170。這裡假設你面對拍照者,所以你的左邊是中間人的右邊);

若多人身高相同,則按名字的字典序公升序排列。這裡保證無重名。

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

輸入格式:

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

using

namespace

std;

struct node ;

int cmp(struct node a, struct node b)

int main()

sort(stu.begin(), stu.end(), cmp);

int t = 0, row = k;

while(row) else

vector

stemp(m);

stemp[m / 2] = stu[t].name;

// 左邊一列

int j = m / 2 - 1;

for(int i = t + 1; i < t + m; i = i + 2)

stemp[j--] = stu[i].name;

// 右邊一列

j = m / 2 + 1;

for(int i = t + 2; i < t + m; i = i + 2)

stemp[j++] = stu[i].name;

// 輸出當前排

cout

<< stemp[0];

for(int i = 1; i < m; i++)

cout

<< " "

<< stemp[i];

cout

<< endl;

t = t + m;

row--;

}return

0;}

**

PAT乙級 1055 集體照 25

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 拍集體照時隊形很重要,這裡對給定的n個人k排的隊形設計排隊規則如下 現給定一組拍照人,請編寫程式輸出他們的隊形。輸入格式 每個輸入包含1個測試用例。每個測試用例第1行給出...

PAT乙級1055集體照

很簡單,利用優先佇列即可,輸入時自動排序 這裡根據題意的從大到小排序來排序 過載 號即可 include include include using namespace std typedef struct student 按照過載後小於規則來進行less 或者greater stu void ta...

PAT乙級 1055 集體照

1055 集體照 25分 拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下 每排人數為 n k 向下取整 多出來的人全部站在最後一排 後排所有人的個子都不比前排任何人矮 每排中最高者站中間 中間位置為 m 2 1,其中 m 為該排人數,除法向下取整 每排其他人以中間人為軸,...