(紀中)1730. 【10.5NOIP普及模擬】sort(sort.pas/cpp)【數學】

(File IO): input:sort.in output:sort.out
時間限制: 1000 ms 空間限制: 256000 KB 具體限制

題目描述
xx和小yy是好朋友。小yy的成績很差,以至於 GPAGPA(平均績點)在系內倒數。系內一共有NN位同學,每位同學有自己的 GPAGPA,以及已修學分數,定義 GPT=GPA×GPT = GPA×已修學分數。小xx爲了幫助小yy提高成績,給小y提了一個要求:新學期的 GPAGPA 要超過系內排名第 KK 位的同學。 爲了幫助理解,給出一個例子:
現在給出系裏面每位同學的 GPTGPT(只有一位小數),以及他們的已修學分。你需要幫助小yy把排名 第KK 位的同學的 GPAGPA求出來。
在這裏插入圖片描述


輸入
1122 個整數N,KN, K
2(N+1)2- (N + 1) 行,每行 11 個非負實數和 11 個整數,分別表示 GPTGPT 和已 修學分數。
注意:所有同學的學分都在[1,250][1, 250] 的範圍。

輸出
1111 個實數,表示排名第 KK 同學的 GPAGPA,保留 22位小數輸出。


樣例輸入
5 3

73 20

79.8 21

72.6 22

85.1 23

65.7 18

樣例輸出
3.65


數據範圍限制
對於 5050% 的數據:1N1001 ≤ N ≤ 100
對於 100100% 的數據:1KN1000001 ≤ K ≤ N ≤ 100000GPTGPT 小數點後至多 11 位,GPAGPA 至多 4.044.04


解題思路
輸入同時求出GPAGPA,存下來,sortsort排序,輸出第kk項。


代碼

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章