输入说明
世博会志愿者的选拔工作正在 𝐴A 市如火如荼的进行
为了选拔最合适的人才,𝐴A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试
面试分数线根据计划录取人数的150%150%划定,即如果计划录取𝑚m名志愿者,则面试分数线为排名第𝑚×150%m×150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩
输入格式
第一行,两个整数𝑛,𝑚n,m,中间用一个空格隔开,其中𝑛n 表示报名参加笔试的选手总数,𝑚m 表示计划录取的志愿者人数
输入数据保证𝑚×150%m×150%向下取整后小于等于𝑛n
第二行到第 𝑛+1n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号𝑘k和该选手的笔试成绩𝑠s
数据保证选手的报名号各不相同
输出格式
第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数
从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出
输入样例
6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88
输出样例
88 5
1005 95
2390 95
1000 90
1001 88
3239 88
数据规模
对于全部的数据5≤𝑛≤5000,3≤𝑚≤𝑛,1000≤𝑘≤9999,1≤𝑠≤1005≤n≤5000,3≤m≤n,1000≤k≤9999,1≤s≤100
代码
#include<iostream>
#include<algorithm>
using namespace std;
struct f{
int ant;
int cj;
};
int cmp(f p1,f p2){
if(p1.cj>p2.cj){
return true;
}
else if(p1.cj==p2.cj){
if(p1.ant<p2.ant){
return true;
}
else{
return false;
}
}
else{
return false;
}
}
int main(){
int n,m;
cin>>n>>m;
m*=1.5;
f a[n];
for(int i=0;i<n;i++){
cin>>a[i].ant>>a[i].cj;
}
sort(a,a+n,cmp);
int h=a[m-1].cj;
int renshu=m;
for(int i=m;i<n;i++){
if(a[i].cj==h) renshu++;
else if(a[i].cj<h) break;
}
cout<<h<<' '<<renshu<<endl;
for(int i=0;i<renshu;i++){
cout<<a[i].ant<<' '<<a[i].cj<<endl;
}
return 0;
}