C Program
#include<stdio.h>
#include<stdlib.h>
double solve(double** arr,double K,int n)
{
double low = -1e6, high = 1e6;
// Fix lower bound so B+R > 0 always
for(int i=0;i<n;i++)
{
if(-arr[i][1] > low)
low = -arr[i][1] + 1e-9;
}
for(int it=0; it<100; it++)
{
double mid = (low + high) / 2.0;
double sum = 0;
for(int i=0;i<n;i++)
sum += arr[i][0] / (arr[i][1] + mid);
if(sum > K)
low = mid;
else
high = mid;
}
return low;
}
int main()
{
int n,col;
scanf("%d %d",&n,&col);
double **arr = (double**)malloc(n*sizeof(double*));
for(int i=0;i<n;i++)
{
arr[i]=(double*)malloc(2*sizeof(double));
scanf("%lf %lf",&arr[i][0],&arr[i][1]);
}
double K;
scanf("%lf",&K);
double R = solve(arr,K,n);
printf("%.6lf",R);
return 0;
}
0 Comments