Problem Description
妖精仓库里有n把圣剑,每把圣剑都有一个攻击值 d 和对使用者体力的消耗值 s 。
珂朵莉想要攻击值高的圣剑,同时又想要体力的消耗尽可能地低,因此对她来说,圣剑的满意度等于攻击值 d 除以消耗值 s 。
现在珂朵莉想要知道她第 k 满意的圣剑的满意度是多少(满意度越高越好)。
Input
第一行两个正整数 n 和 k ,n 代表圣剑的数量。(1 <= k <= n <= 1000)
接下来 n 行每行两个正整数 di 和 si ,分别代表第 i 把圣剑的攻击值和对使用者体力的消耗值。(1 <= si , di <=100)
Output
一个正整数代表她第 k 满意的圣剑的满意度是多少,结果保留两位小数。
Sample Input
4 2
1 3
2 4
3 6
4 5
Sample Output
0.50
Hint
Source
行走的二叉树
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double a[],int left,int right,int x)
{
int i,j;
i=left;
j=right;
double k=a[left],re;
while(i<j)
{
while(a[j]<=k&&i<j)
{
j--;
}
a[i]=a[j];
while(a[i]>=k&&i<j)
{
i++;
}
a[j]=a[i];
}
a[i]=k;
if(i==x)
{
re=a[i];
}
else if(i>x)
{
re=f(a,left,i-1,x);
}
else
{
re=f(a,i+1,right,x);
}
return re;
}
int main()
{
int n,k,di,si,i;
double a[1005],re;
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
{
scanf("%d%d",&di,&si);
a[i]=1.0*di/si;
}
re=f(a,0,n-1,k-1);
printf("%.2lf\n",re);
return 0;
}