洛谷1068

題目:

題目描述

世博會志願者的選拔工作正在 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 普及組 第二題

題解:

注意;;樣例中,m*1.5=4,但是排序後第五個人分數與第四名相同爲88,所以實際進入的人是五人

代碼:

#include<iostream>
#include<cstring>
#include<string.h>
#include<algorithm>
using namespace std;
struct ss{
    int sno;
    int grade;
}a[6000];
bool cmp(ss A,ss B)
{
    if(A.grade==B.grade)
        return A.sno<B.sno;
    else
        return A.grade>B.grade;
}
int main()
{
    int n,m;
    cin>>n>>m;
    m=m*1.5;
    for(int i=0;i<n;i++)
        cin>>a[i].sno>>a[i].grade;
       sort(a,a+n,cmp);
       //cout<<a[m-1].grade<<" "<<m<<endl;
       int x=m;
       for(int i=m;i<n;i++)
       {
           if(a[i].grade>=a[m-1].grade)
            x++;
       }
       cout<<a[x-1].grade<<" "<<x<<endl;
       for(int i=0;i<x;i++)
       {
            cout<<a[i].sno<<" "<<a[i].grade<<endl;
       }

       return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章