题解:P1068 [NOIP2009 普及组] 分数线划定

· · 题解

思路

可以用结构体来做。

排序关键代码:

bool cmp(stu a,stu b){
    if(a.s!=b.s){
        return a.s>b.s;
    }else{
        return a.k<b.k;
    }
}

代码

#include <bits/stdc++.h>
using namespace std;
struct stu{
    int k,s;
}a[5005];
bool cmp(stu a,stu b){
    if(a.s!=b.s){
        return a.s>b.s;
    }else{
        return a.k<b.k;
    }
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i].k>>a[i].s;
    }
    sort(a+1,a+1+n,cmp);
    int t=m*1.5;
    int cnt=a[t].s;
    int sum=0;
    for(int i=1;i<=n;i++){
        if(a[i].s>=cnt){
            sum++;
        }
    }
    cout<<cnt<<' '<<sum<<endl;
    for(int i=1;i<=sum;i++){
        cout<<a[i].k<<' '<<a[i].s<<endl;
    }
    return 0;
}