珂朵莉与圣剑

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44041997/article/details/86162582