思路:
简化:
- 我们可以用 define 把数对的 first 和 second 简化成 X 和 Y。
- 随后用 typedef 把 pair<int,int> 简化成 PIR。
保存:
- 输入 num 和 score 后,我们可以用可变数组的 push_back() 来保存进去。
排序:
- 我们可以定义一个可变数组 vector 来存储报名号和笔试成绩,里面要用 PIR 的类型。
- 定义一个自定义排序方式 cmp 来排序,如果分数相同,就按报名号由小到大的顺序进行排序。
- 最后我们可以用一个 sort 来排序,最后要填入排序方式 cmp。
分数线:
- 我们可以定义一个 k 就等于计划录取的志愿者人数乘 150%(可以用1.5来表示),随后定义一个最低成绩 score 等于可变数组的第 k 个成绩,要注意的是可变数组不是 k 而是 k-1。
进入面试的选手:
- 我么可以再定义 cnt 表示进入面试的选手。历遍 1 到 v 的长度,如果第 v 的下标 i 大于最低成绩 score,那么 cnt 就累加起来。
输出:
- 第一行我们先输出最低成绩和面试的选手的数量。
- 随后 cnt 行每行输出报名号和笔试成绩。
AC CODE:
#include <bits/stdc++.h>
#define X first
#define Y second
using namespace std;
typedef long long LL;
typedef pair<int,int> PIR;
vector<PIR> v;
bool cmp(PIR a,PIR b){
if(a.X!=b.X){
return a.X>b.X;
}
return a.Y<b.Y;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
int num,score;
cin>>num>>score;
v.push_back({score,num});
}
sort(v.begin(),v.end(),cmp);
int cnt = 0;
int k=m*1.5;
int score=v[k-1].X;
for(int i=0;i<v.size();i++){
if(v[i].X>=score){
cnt++;
}
}
cout<<score<<' '<<cnt<<endl;
for(int i=0;i<cnt;i++){
cout<<v[i].Y<<' '<<v[i].X<<endl;
}
return 0;
}
标签:cnt,int,划定,score,1180,PIR,排序,分数线,cmp
From: https://blog.csdn.net/wang__1233/article/details/140713223