照畢業照一定要排好隊,不然就會有人被擋住,造成終身遺憾。假設有n個畢業生,準備排k行,拍畢業照的攝影師定下這麼幾條規矩: 1、每一行的人數一定是n/k個,如果有多的同學,全部站最後一排; 2、後排的一定不能比前排任何乙個同學矮; 3、在任意一排,個子最高的站中間,之後次高的站他的右邊,第三高的站他的左邊,第四高的又站右邊,這樣依次輪換。例如,有5個同學,身高依次是190厘公尺,188厘公尺,186厘公尺,175厘公尺和170厘公尺,那麼最後應該排成175,188, 190,186, 170。這裡我們假設攝影師面向同學們站立,這樣攝影師的左手就是同學們的右手。 4、如果身高相同,那就按姓名的字母序的公升序排列,我們假定沒有重名的。
輸入格式:
每個輸入包括乙個測試用例,第一行有兩個正整數n和k,其中n是畢業生總數,k是排數。 n<=10000,k<=10,隨後n行,分別給出不超過8個字元的姓名以及他們的身高,姓名中不含空格。
輸出格式:
對每一組輸入,顯示出畢業生拍照時的位置情況,要求列印k行學生的姓名,姓名之間以1個空格分隔,行尾不得有多餘空格。因為你是面向畢業生的,所以在最後一排的同學應該顯示在第一行,在第一排的同學顯示在最後一行。
輸入樣例:
在這裡給出一組輸入。例如:
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 nickann mike eva
tim amy john
#include
#include
#include
#include
#include
using
namespace std;
#define max_n 10005
struct node
date[max_n]
;int n,k;
bool
cmp1
(const node a,
const node b)
bool
cmp2
(const node a,
const node b)
voidf(
)}else
} t =0;
flag =1;
node_h ++;}
}void
print_ans()
cout << endl;
for(i;i<=n;i++)}
void
print()
cout << endl;
for(
int i =
1;i<=n;i++
) cout << endl;
for(
int i =
1;i<=n;i++
) cout <<
"\n**************/"
}int
main()
//比較身高
sort
(date+
1,date+
1+n,cmp1)
;//print();
//排列f(
);//print();
//全規則排序
sort
(date+
1,date+
1+n,cmp2)
;//print();
//輸出答案
print_ans()
;return0;
}
c 自定義排序
class program console.writeline console.writeline source tolist value var list arr.tolist for int i 0 i 10 i console.writeline console.writeline sourc...
C 自定義排序
include include include using namespace std bool compare1 const int a,const int b bool compare2 const int a,const int b bool compare3 const int a,cons...
C 自定義類排序
1 宣告乙個類 人物類 public class person 2 宣告乙個繼承了介面icomparer的類 比較人物類例項大小,實現介面icomparer public class personcomparer icomparer return 0 3 main函式,建立乙個list,並使用剛建立...