///4.最大化平均值
/**
Q:有n个价值和重量为vi、wi的物品,从中挑选k个使单位重量的价值最大
A:
此题不能直接用贪心法:直接按物品的单位价值排序,然后依次取k个;
我们要求的最大值是,价值之和/重量之和;而上面所说是单位价值之和。
------------------------------------------变形贪心
二分搜索法模型:
条件C(x):可以挑选使得单位重量的物品价值不小于x->求满足条件的最大x->如何判断C(x)
价值和/重量和>=x
价值和-重量和*x>=0
和(价值-重量*x)>=0
可以对(价值-重量*x)的值进行贪心的选取,选取最大的k个 和>=0
*/
#include "iostream"
#include "cstdio"
#include "algorithm"
using namespace std;
#define MAX 100010
#define INF 0x3f3f3f3f
int N,K;
int w[MAX],v[MAX];
double y[MAX];
bool C(double x)
{
for(int i=0;i<N;i++)
y[i]=v[i]-w[i]*x;
sort(y,y+N);
///取k个
int t=N-1-K;
double sum=0;
for(int i=N-1;i>t;i--)
{
sum+=y[i];
}
return sum>=0;
}
void solve()
{
double lb=0,ub=INF,mid;
for(int i=0;i<100;i++)
{
mid=(lb+ub)/2;
if(C(mid))
lb=mid;
else
ub=mid;
}
printf("%.2f\n",ub);
}
int main()
{
while(~scanf("%d%d",&N,&K))
{
for(int i=0;i<N;i++)
scanf("%d%d",&w[i],&v[i]);
solve();
}
return 0;
}
/**
3 2
2 2
5 3
2 1
0.75
*/