信息学一本通2331: 信息学奥赛一本通T1180-分数线划定题解

凌晚轩 算法基础篇 53 0
想要检验自己的编程水平?来试试全网最全C++题库,让您在挑战中不断进步。
世博会志愿者的选拔工作正在 A 市如火如荼的进行,为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试,面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m×150%名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。

世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m×150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。 现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。


#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int i,j,cnt,pass=0; //cnt计划录取人数 ,pass通过分数 
struct score{
    int k,s;  //k报名号 s笔试成绩 
}cte[5010];    //contestant 选手 

bool mycmp(score a,score b){
    return(a.s>b.s || a.s == b.s && a.k<b.k);  
    //成绩降序,成绩相同,序号升序 
}
int main(){
    int n,m;   //n代表选手总数 m代表计划录取人数 
    cin>>n>>m;
    for(i=1; i<=n; i++){  //输入 
        cin>>cte[i].k>>cte[i].s;
    }
    sort(cte+1,cte+n+1,mycmp);
    cnt=m*1.5;
    int temp=cnt;
    for(i=1; i<=n; i++){
        if(temp){
            pass=cte[i].s;
            temp--;
        }else{  //若有分数相同的个数加1 
            if(cte[i].s == pass){
                cnt++;
            }else{
                break;
            }
        }    
    }
    cout<<pass<<" "<<cnt<<endl;
    for(i=1; i<=cnt; i++){
        cout<<cte[i].k<<" "<<cte[i].s<<endl;
    } 
    return 0;
}
信息学一本通2331: 信息学奥赛一本通T1180-分数线划定题解
(图片来源网络,侵删)
成为编程大师,不再是梦想!全网最全C++题库,助您开启编程新篇章。

标签: 信息学一本通2331: 信息学奥赛一本通T1180-分数线划定题解