1. 程式人生 > >PAT——1055. 集體照

PAT——1055. 集體照

測試 ont cal under result http ann 處理 ret

拍集體照時隊形很重要,這裏對給定的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


 1 package com.hone.basical;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
5 import java.util.Comparator; 6 import java.util.List; 7 import java.util.Scanner; 8 9 /** 10 * 原題目:https://www.patest.cn/contests/pat-b-practise/1055 11 * @author Xia 12 * 可以利用字符串拼接來處理 13 * 而且決定了得先從最後一排開始戰隊,同時對於每一排一邊插入一個元素的情況,可以通過字符串左右 14 * 拼接的技術來實現。 15 * 竟然運行時間超時 16 */ 17 18 public class basicalLevel1055groupPic {
19 20 public static void main(String[] args) { 21 Scanner in = new Scanner(System.in); 22 int N = in.nextInt(); //總人數 23 int k = in.nextInt(); //k表示排數 24 25 List<Person> persons = new ArrayList<>(); 26 int rowPeo = N/k; //第一排的人數 27 int lastPeo = N-(k-1)*rowPeo; //最後一排的人數 28 for (int i = 0; i < N; i++) { 29 Person p = new Person(); 30 p.name = in.next(); 31 p.height = in.nextInt(); 32 persons.add(p); 33 } 34 35 //利用Collections將所有的人進行排序 36 Collections.sort(persons,new Person()); 37 38 int index = persons.size()-1; 39 String result = ""; 40 //先從最後一排開始站隊(其實這個和前面輸出方式差不多,都是按照輸出的順序進行排序) 41 int i = k; 42 result = persons.get(index).name; 43 index--; 44 for (int j = 1; j < lastPeo; j++) { 45 if (j%2==1) { 46 result=persons.get(index--).name+" "+result; 47 }else { 48 result=result+" "+persons.get(index--).name; 49 } 50 } 51 System.out.println(result); 52 53 for (int h = k-1; h > 0; h--) { 54 result = persons.get(index--).name; 55 for (int j = 1; j < rowPeo; j++) { 56 if (j%2==1) { 57 result=persons.get(index--).name+" "+result; 58 }else { 59 result=result+" "+persons.get(index--).name; 60 } 61 } 62 System.out.println(result); 63 } 64 } 65 } 66 67 //創建一個person類 並且將所有的人按照身高排序(從小到大) 68 class Person implements Comparator { 69 String name; 70 int height; 71 72 @Override 73 public int compare(Object o1, Object o2) { 74 Person p1 = (Person)o1; 75 Person p2 = (Person)o2; 76 if (p1.height == p2.height) { 77 return -p1.name.compareTo(p2.name); 78 }else { 79 return p1.height-p2.height; 80 } 81 } 82 }





PAT——1055. 集體照