[NOIP2009普及]分数线划定 T2 排序
Description
世博會志愿者的選拔工作正在 A 市如火如荼的進行。為了選拔最合適的人才,A 市對所有報名的選手進行了筆試,筆試分?jǐn)?shù)達到面試分?jǐn)?shù)線的選手方可進入面試。面試分?jǐn)?shù)線根據(jù)計劃錄取人數(shù)的150%劃定, 即如果計劃錄取m名志愿者, 則面試分?jǐn)?shù)線為排名第m*150%
(向下取整) 名的選手的分?jǐn)?shù),而最終進入面試的選手為筆試成績不低于面試分?jǐn)?shù)線的所有選手。
現(xiàn)在就請你編寫程序劃定面試分?jǐn)?shù)線,并輸出所有進入面試的選手的報名號和筆試成績。
Input
第一行,兩個整數(shù) n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n) ,中間用一個空格隔開,其中 n 表示報名參加筆試的選手總數(shù),m表示計劃錄取的志愿者人數(shù)。輸入數(shù)據(jù)保證 m*150%向下取整后小于等于 n。
第二行到第 n+1 行,每行包括兩個整數(shù),中間用一個空格隔開,分別是選手的報名號 k(1000 ≤ k ≤ 9999)和該選手的筆試成績 s(1 ≤ s ≤ 100) 。數(shù)據(jù)保證選手的報名號各不相同。
Output
第一行,有兩個整數(shù),用一個空格隔開,第一個整數(shù)表示面試分?jǐn)?shù)線;第二個整數(shù)為進入面試的選手的實際人數(shù)。
從第二行開始,每行包含兩個整數(shù),中間用一個空格隔開,分別表示進入面試的選手的報名號和筆試成績,按照筆試成績從高到低輸出,如果成績相同,則按報名號由小到大的順序輸出。
Sample Input
Sample Output
HINT
【樣例說明】
m*150% = 3*150% = 4.5,向下取整后為 4。保證4個人進入面試的分?jǐn)?shù)線為 88,但因為 88有重分,所以所有成績大于等于 88的選手都可以進入面試,故最終有 5 個人進入面試。
Solution
一道結(jié)構(gòu)體排序題,先按成績排序,如果成績相同則按編號排序,算出分?jǐn)?shù)線依次輸出即可。
Code
#include <stdio.h>
#include <algorithm>
using namespace std;
struct note
{
int num;
int score;
}prt[];
bool cmp(const note &a,const note &b)
{
return a.score!=b.score?a.score>b.score:a.num<b.num;
//結(jié)構(gòu)體排序
}
int down(int x)
{
return x*/;
//計算作為分?jǐn)?shù)線的人的排名
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d%d",&prt[i].num,&prt[i].score);
sort(prt+,prt+n+,cmp);//結(jié)構(gòu)體排序
int std=prt[down(m)].score;//分?jǐn)?shù)線
int ans=;
for(int i=;i<=n;i++)
if(std<=prt[i].score)
ans++;//過線的人數(shù)
printf("%d %d\n",std,ans);
for(int i=;i<=ans-;i++)
printf("%d %d\n",prt[i].num,prt[i].score);
printf("%d %d",prt[ans].num,prt[ans].score);
}
總結(jié)
以上是生活随笔為你收集整理的[NOIP2009普及]分数线划定 T2 排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 丑憨批的爬虫笔记2(爬虫引发的问题+ro
- 下一篇: 丑憨批的爬虫笔记3(实例)