分数线划定

2020-09-10 23:51:30 浏览数 (1)

世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。 现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。 输入描述: 第一行,两个整数n,m(5≤n≤5000,3≤m≤n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m表示计划录取的志愿者人数。输入数据保证m150%向下取整后小于等于n。 第二行到第n 1行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000≤k≤9999)和该选手的笔试成绩s(1≤s≤100)。数据保证选手的报名号各不相同。 输出描述: 第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。 从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

思路:难度主要在于读题,估计是个英文题的话会很惨。

就是排序

代码语言:javascript复制
#include <bits/stdc  .h>
using namespace std;
#define js ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
typedef long long ll; typedef unsigned long long ull; typedef long double ld;
const ll MOD = 1e9   7;
inline ll read() { ll s = 0, w = 1; char ch = getchar(); while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }    while (ch >= 48 && ch <= 57) s = (s << 1)   (s << 3)   (ch ^ 48), ch = getchar();    return s * w; }
inline void write(ll x) { if (!x) { putchar('0'); return; } char F[40]; ll tmp = x > 0 ? x : -x; if (x < 0)putchar('-');    int cnt = 0;    while (tmp > 0) { F[cnt  ] = tmp % 10   '0';        tmp /= 10; }    while (cnt > 0)putchar(F[--cnt]); }
inline ll gcd(ll x, ll y) { return y ? gcd(y, x % y) : x; }
ll qpow(ll a, ll b) { ll ans = 1;    while (b) { if (b & 1)    ans *= a;        b >>= 1;        a *= a; }    return ans; }    ll qpow(ll a, ll b, ll mod) { ll ans = 1; while (b) { if (b & 1)(ans *= a) %= mod; b >>= 1; (a *= a) %= mod; }return ans % mod; }
inline int lowbit(int x) { return x & (-x); }

const int N = 1e6   7;
int  b[N];
stack<int> st;

struct node{
    int nn;
    int s;
}a[10000];

int cmpp(node x, node y){
    if(x.s == y.s) return x.nn < y.nn;
    return x.s > y.s;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i  ){
        cin>>a[i].nn>>a[i].s;
    }
    sort(a,a n,cmpp);
    int ans = m * 1.5;
    //cout<<ans<<endl;
    int res = a[ans-1].s;
    //cout<<res<<endl;
    int tot = 0;
    
    for(int i=0;i<n;i  ){
        if(a[i].s >= res) tot  ;
    }
    cout<<res<<" "<<tot<<endl;
    
    for(int i=0;i<n;i  ){
        if(a[i].s >=res){
            cout<<a[i].nn<<" "<<a[i].s<<endl;
        }
    }
    return 0;
}

0 人点赞