链接:https://ac.nowcoder.com/acm/contest/9033/A
来源:牛客网
招生
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

小A去参加W大学的一个招生项目.

除了小A,还有n个人报名了W大学的这个招生项目,而W大学只招收m个人.

每个人有一个高考分和一个校测分,分数都是非负整数,满分都是p,分数都不大于p.

因为小A优异的竞赛成绩,W大学给了小A承诺,他将会校测给满分.

然后每个人的最终得分为 高考分*85%  + 校测分*15%.

最终得分从高到低排前m高的将被录取,如果有同分,小A将优先被录取.

求小A高考至少要考到多少分才能被W大学录取.

输入描述:

第一行,三个正整数n,m,p.
后面n行,每行两个正整数数ai,bia_i,b_iai,bi,分别表示第i个人的高考分和校测分。

输出描述:

一行一个数,表示答案:小A高考至少要考多少分。
示例1

输入

6 3 750
700 530
683 625
703 620
699 623
710 538
654 599

输出

673

备注:

m≤n≤105,ai,bi≤p≤109m \le n \le 10^5,a_i,b_i \le p \le10^9mn105,ai,bip109

Hint
关注分数为负数的情况,因为要大于等于排序后的第m个同学的分数故应注意在计算输出分数时四舍五入。

#include <bits/stdc++.h>

using namespace std;

struct Name
{
    double goal1;
    double goal2;
    double goal;
}name[100000];

bool cmp(Name a,Name b)
{
    return a.goal>b.goal;
}
int main()
{
    int n,m,p;
    scanf("%d%d%d",&n,&m,&p);
    for(int i=0;i<n;i++)
    {
        scanf("%lf%lf",&name[i].goal1,&name[i].goal2);
        name[i].goal=name[i].goal1*0.85+name[i].goal2*0.15;
    }
    sort(name,name+n,cmp);
    /*for(int i=0;i<n;i++)
    {
        cout<<name[i].goal<<endl;
    }*/
    if(m==1)
    {
        if((name[0].goal-(p*0.15))/0.85<=0)printf("0");
        else
            printf("%.0lf",(name[0].goal-(p*0.15))/0.85+0.5);
    }
    else if(m==n)
    {
        if((name[n].goal-(p*0.15))/0.85<=0)printf("0");
        else
        printf("%.0lf",(name[n].goal-(p*0.15))/0.85+0.5);
    }
    else
        if((name[m-1].goal-(p*0.15))/0.85<=0)printf("0");
        else
        printf("%.0lf",(name[m-1].goal-(p*0.15))/0.85+0.5);
    return 0;
}