列表

详情


NC213907. 招生

描述

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

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

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

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

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

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

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

输入描述

第一行,三个正整数n,m,p.

后面n行,每行两个正整数数a_i,b_i,分别表示第i个人的高考分和校测分。

输出描述

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

示例1

输入:

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

输出:

673

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 87ms, 内存消耗: 1160K, 提交时间: 2020-11-22 23:37:45

#include<bits/stdc++.h>
using namespace std;
double ar[100000];
int main()
{
	int n,m,p,i,a,b;
	cin>>n>>m>>p;
	for(i=0;i<n;i++){
		cin>>a>>b;
		ar[i]=a*0.85+b*0.15;
	}
	sort(ar,ar+n);
	int num=ceil((ar[n-m]-p*0.15)/0.85);
	if(num<0)cout<<0;
    else cout<<num;
	return 0;
}

Python3(3.9) 解法, 执行用时: 222ms, 内存消耗: 7320K, 提交时间: 2020-11-26 20:20:56

import math as mt
n,m,p = map(int,input().split())
a = list()
for i in range(n):
    ai,bi = map(int,input().split())
    a.append(ai*0.85+bi*0.15)
a.sort(reverse=1)
print(mt.ceil(max(0,(a[m-1]-0.15*p)/0.85)))

上一题