题目
分析
先分析样本数据:
6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88
总共6个人,最终要选择3个人。按照题意,分数线应该划在分数排名\(\lfloor 3\times 1.5 \rfloor = 4\)这个位置的分数。简单对上述数据排序后得知,这个分数应该是95 95 90 88 88 84中的88。
但是,我们不能直接截断在这个位置,因为题目中要求,如果分数相同,那么并列的分数(和候选人)也要进入名单,所以我们需要进行一些处理。
排序
基于结构的多字段排序已经有很多例子了,这里不再赘述。
选择分数线
分数排序后,我们可以得到录取分数线的位置:int low_index = floor(total * 1.5);,然后找到这个位置的分数:int low_score = v.at(low_index - 1).score;。
注意,我们这里将位置减1。这是因为我们用了STL中的vector,所以是0基数组,需要进行偏移1的操作。
找到面试人数
定好分数线后,我们需要遍历一次数组,找到有多少人(考虑并列)进入面试:
int count = 0;
for (auto vv : v)
{
if (vv.score >= low_score)
{
count++;
}
}
最后,按照题意输出分数线,面试人数以及相应的面试人即可。
答案

思考
(略)
