志愿者模拟分数线的划定方法如下:
确定面试分数线
面试分数线是根据计划录取人数的150%划定的。
如果计划录取的志愿者人数为 ( m ),则面试分数线为排名第 ( m times 150% ) (向下取整) 名的选手的分数。
计算实际进入面试的人数
最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。
示例
假设计划录取的志愿者人数为 ( m ),则面试分数线为排名第 ( m times 150% ) (向下取整) 名的选手的分数。例如,如果 ( m = 4 ),则 ( m times 150% = 6 ),向下取整为4,因此面试分数线为排名第4名的选手的分数。
输入输出格式
输入:
第一行:两个整数 ( n ) 和 ( m )(( 5 leq n leq 5000 ),( 3 leq m leq n )),中间用一个空格隔开。
第二行到第 ( n+1 ) 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号 ( k ) (1000 ≤ ( k ) ≤ 9999) 和该选手的笔试成绩 ( s ) (1 ≤ ( s ) ≤ 100)。
输出:
第一行:两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。
从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。
代码示例(C++)
```cpp
include include include using namespace std; int main() { int n, m; cin >> n >> m; vector for (int i = 0; i < n; ++i) { int k, s; cin >> k >> s; scores[i] = {k, s}; } // Sort scores by score in descending order, then by k in ascending order sort(scores.begin(), scores.end(), [](const pair return a.second > b.second || (a.second == b.second && a.first < b.first); }); int interviewLine = scores[m * 150 / 100 - 1].second; int actualInterviewees = 0; for (const auto& score : scores) { if (score.second >= interviewLine) { ++actualInterviewees; } } cout << interviewLine << " " << actualInterviewees << endl; for (const auto& score : scores) { if (score.second >= interviewLine) { cout << score.first << " " << score.second << endl; } } return 0; } ``` 这个代码示例读取输入数据,对笔试成绩进行排序,计算并输出面试分数线和实际进入面试的人数。