(File IO): input:sort.in output:sort.out
时间限制: 1000 ms 空间限制: 256000 KB 具体限制
题目描述
小
x
x
x和小
y
y
y是好朋友。小
y
y
y的成绩很差,以至于
G
P
A
GPA
GPA(平均绩点)在系内倒数。系内一共有
N
N
N位同学,每位同学有自己的
G
P
A
GPA
GPA,以及已修学分数,定义
G
P
T
=
G
P
A
×
GPT = GPA×
GPT=GPA×已修学分数。小
x
x
x为了帮助小
y
y
y提高成绩,给小y提了一个要求:新学期的
G
P
A
GPA
GPA 要超过系内排名第
K
K
K 位的同学。 为了帮助理解,给出一个例子:
现在给出系里面每位同学的
G
P
T
GPT
GPT(只有一位小数),以及他们的已修学分。你需要帮助小
y
y
y把排名 第
K
K
K 位的同学的
G
P
A
GPA
GPA求出来。
输入
第
1
1
1 行
2
2
2 个整数
N
,
K
N, K
N,K。
第
2
−
(
N
+
1
)
2- (N + 1)
2−(N+1) 行,每行
1
1
1 个非负实数和
1
1
1 个整数,分别表示
G
P
T
GPT
GPT 和已 修学分数。
注意:所有同学的学分都在
[
1
,
250
]
[1, 250]
[1,250] 的范围。
输出
第
1
1
1 行
1
1
1 个实数,表示排名第
K
K
K 同学的
G
P
A
GPA
GPA,保留
2
2
2位小数输出。
样例输入
5 3
73 20
79.8 21
72.6 22
85.1 23
65.7 18
样例输出
3.65
数据范围限制
对于
50
50%
50 的数据:
1
≤
N
≤
100
1 ≤ N ≤ 100
1≤N≤100。
对于
100
100%
100 的数据:
1
≤
K
≤
N
≤
100000
1 ≤ K ≤ N ≤ 100000
1≤K≤N≤100000,
G
P
T
GPT
GPT 小数点后至多
1
1
1 位,
G
P
A
GPA
GPA 至多
4.04
4.04
4.04。
解题思路
输入同时求出
G
P
A
GPA
GPA,存下来,
s
o
r
t
sort
sort排序,输出第
k
k
k项。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,k;
double x,y,ans[10000000];
bool cmp(double x,double y){
return x>y;
}
int main(){
freopen("sort.in","r",stdin);
freopen("sort.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
cin>>x>>y;
ans[i]=1.0*x/y;//求GAP
}
sort(ans+1,ans+1+n,cmp);//快排
printf("%0.2f",ans[k]);//输出第k项
return 0;
}