洛谷:P1068:分数线划定


洛谷:P1068:分数线划定

题目

P1068:分数线划定

分析

先分析样本数据:

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++;
        }
    }

最后,按照题意输出分数线,面试人数以及相应的面试人即可。

答案

Solution

思考

(略)

Previous Next