@[xiongpapa](/user/1005879)
```cpp
#include <bits/stdc++.h>
using namespace std;
int n, m;
struct node
{
int k;
int s;
} a[5001], b[5001];
void buble(int cnt, node b[])
{
for (int i = 1; i <= cnt; i++)
{
bool flag = true;
for (int j = 1; j <= cnt - i; j++)
if (b[j].s < b[j + 1].s)
{
swap(b[j], b[j + 1]);
flag = false;
}
else if (b[j].s == b[j + 1].s && b[j].k > b[j + 1].k)
{
swap(b[j], b[j + 1]);
flag = false;
}
if (flag)
break;
}
}
int main()
{
// 面试分数线根据计划录取人数的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)。数据保证选手的报名号各不相同。
// 第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的
// 实际人数。从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和
// 笔试成绩,按照笔成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i].k >> a[i].s;
int tmp = floor(m * 1.5), cnt = 0, scoreline, x = 1;
buble(n, a);
scoreline = a[tmp].s;
cout << scoreline << ' ';
for (int i = 1; i <= n; i++)
if (a[i].s >= scoreline)
{
b[x++] = a[i];
cnt++;
}
cout << cnt << endl;
buble(cnt, b);
for (int i = 1; i <= cnt; i++)
cout << b[i].k << ' ' << b[i].s << endl;
return 0;
}
```
我全部ac了
by Enoch2013 @ 2023-11-14 21:12:01