C++,分數線划定


題目描述

世博會志願者的選拔工作正在 A 市如火如荼的進行。為了選拔最合適的人才,A 市對

所有報名的選手進行了筆試,筆試分數達到面試分數線的選手方可進入面試。面試分數線根

據計划錄取人數的150%划定,即如果計划錄取m名志願者,則面試分數線為排名第m*150%

(向下取整)名的選手的分數,而最終進入面試的選手為筆試成績不低於面試分數線的所有

選手。

現在就請你編寫程序划定面試分數線,並輸出所有進入面試的選手的報名號和筆試成

績。

輸入輸出格式

輸入格式:

 

第一行,兩個整數 n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中間用一個空格隔開,其

中 n 表示報名參加筆試的選手總數,m 表示計划錄取的志願者人數。輸入數據保證 m*150%

向下取整后小於等於 n。

第二行到第 n+1 行,每行包括兩個整數,中間用一個空格隔開,分別是選手的報名號 k

(1000 ≤ k ≤ 9999)和該選手的筆試成績 s(1 ≤ s ≤ 100)。數據保證選手的報名號各

不相同。

 

輸出格式:

 

第一行,有兩個整數,用一個空格隔開,第一個整數表示面試分數線;第二個整數為

進入面試的選手的實際人數。

從第二行開始,每行包含兩個整數,中間用一個空格隔開,分別表示進入面試的選手

的報名號和筆試成績,按照筆試成績從高到低輸出,如果成績相同,則按報名號由小到大的

順序輸出。

 

輸入輸出樣例

輸入樣例#1:
6 3 
1000 90 
3239 88 
2390 95 
7231 84 
1005 95 
1001 88
輸出樣例#1:
88 5 
1005 95 
2390 95 
1000 90 
1001 88 
3239 88 

說明

【樣例說明】

m*150% = 3*150% = 4.5,向下取整后為 4。保證 4 個人進入面試的分數線為 88,但因為 88

有重分,所以所有成績大於等於 88 的選手都可以進入面試,故最終有 5 個人進入面試。

NOIP 2009 普及組 第二題

 

------------------------------------------------------------------------------------------------------------

思路:水。

用結構體表示每一個個體。輸入數據后快排,然后找出並加上和分數線同分的人,最后輸出。

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

struct point{
    int x;//編號 
    int y;//分數 
};
point k[5001];

int comp(const point &a,const point &b){
    if(a.y>b.y) return 1;
    if(a.y<b.y) return 0;
    if(a.x<b.x) return 1; //成績相同時,按照編號排序 
    return 0;
}
 
int main(){
    int n,m,i,tot,cnt=0;
    cin>>n;
    cin>>m;
    for(i=1;i<=n;i++){
        cin>>k[i].x;
        cin>>k[i].y;
    }
    sort(k+1,k+1+n,comp);
    tot=floor(m*1.5);//向下取整 
    
    for(i=tot+1;i<=n;i++){
        if(k[i].y==k[tot].y) cnt++;//找同分的情況 
        else break;
    }
    
    cout<<k[tot].y<<" "<<tot+cnt<<endl;
    for(i=1;i<=tot+cnt;i++){
        cout<<k[i].x<<" "<<k[i].y<<endl;
    }
    return 0;
}
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM