【牛客網】美團2021校招筆試-淘汰分數
阿新 • • 發佈:2022-04-01
題目連結:https://www.nowcoder.com/test/28665343/summary
題目描述:
某比賽已經進入了淘汰賽階段,已知共有n名選手參與了此階段比賽,他們的得分分別是a_1,a_2….a_n,小美作為比賽的裁判希望設定一個分數線m,使得所有分數大於m的選手晉級,其他人淘汰。
但是為了保護粉絲脆弱的心臟,小美希望晉級和淘汰的人數均在[x,y]之間。
顯然這個m有可能是不存在的,也有可能存在多個m,如果不存在,請你輸出-1,如果存在多個,請你輸出符合條件的最低的分數線。
資料範圍:1 <= n <= 50000,1<=x <= y <= n
輸入描述:
輸入第一行僅包含三個正整數n,x,y,分別表示參賽的人數和晉級淘汰人數區間。(1<=n<=50000,1<=x,y<=n)輸入第二行包含n個整數,中間用空格隔開,表示從1號選手到n號選手的成績。(1<=|a_i|<=1000)
輸出描述:
輸出僅包含一個整數,如果不存在這樣的m,則輸出-1,否則輸出符合條件的最小的值。
輸入
6 2 3
1 2 3 4 5 6
輸出
3
題解:
1.在[x,y]中若選最小人數,2 * x > n, 則不存在;選最大人數,若 2* y < n,則不存在。
2.對陣列進行排序。
3.在[x,y]中選2個數i,j,使i + j = n,同時i最小。
let firstline = readline(); let n = firstline.split(' ')[0]; let x = firstline.split(' ')[1]; let y = firstline.split(' ')[2]; let scores = readline().split(' '); solve(n, x, y, scores); function solve(n, x, y, scores){ scores.sort((a, b) => {return a - b}); if(2 * x > n || 2 * y < n) { print("-1"); } let i = 0; for(i = x; i <= y; i++) { let j = n - i; if(j >= x && j <= y) break; } print(scores[i - 1]); }