A的
#include <bits/stdc++.h>
using namespace std;
//#define MAXN 100010
#define rep(i,a,n) for (int i=a;i<=n;++i)
#define per(i,a,n) for (int i=n;i>=a;--i)
#define rep0(i,n) for(int i=0;i<n;++i)
#define INF 1000000000
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define pob pop_back
#define all(x) (x).begin(),(x).end()
#define ent cout<<'\n'
//const int N = ;
typedef vector<int> vi;
typedef long long ll;
typedef pair<int, int> pii;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
inline void read(int &x)
{
char c;int f=1;
while(!isdigit(c=getchar()))if(c=='-')f=-1;
x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15);
x*=f;
}
inline void read(ll &x)
{
char c;int f=1;
while(!isdigit(c=getchar()))if(c=='-')f=-1;
x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15);
x*=f;
}
inline void write(int x){
if(x>9)write(x/10);
putchar(x%10+'0');
}
#define print(x) if(x==0)putchar('0');else write(x)
int a[200010],b[200010];
int n,p;
ll sum;
double l=0,r=1e10;
bool check(double mid)
{
double mv=p*mid;
double sum=0;
rep(i,1,n)
{
if(a[i]*mid <= b[i])
continue;
else
sum+= a[i]*mid-b[i];
}
return sum<=mv;
}
int main()
{
read(n),read(p);
rep(i,1,n)
{
read(a[i]),read(b[i]);
sum+=a[i];
}
if(sum<=p)
{
puts("-1");
return 0;
}
while(r-l>1e-6)
{
double mid=(l+r)/2;
if(check(mid))
l=mid;
else
r=mid;
}
printf("%.10f",l);
return 0;
}
wa code
#include <bits/stdc++.h>
using namespace std;
//#define MAXN 100010
#define rep(i,a,n) for (int i=a;i<=n;++i)
#define per(i,a,n) for (int i=n;i>=a;--i)
#define rep0(i,n) for(int i=0;i<n;++i)
#define INF 1000000000
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define pob pop_back
#define all(x) (x).begin(),(x).end()
#define ent cout<<'\n'
//const int N = ;
typedef vector<int> vi;
typedef long long ll;
typedef pair<int, int> pii;
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
inline void read(int &x)
{
char c;int f=1;
while(!isdigit(c=getchar()))if(c=='-')f=-1;
x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15);
x*=f;
}
inline void read(ll &x)
{
char c;int f=1;
while(!isdigit(c=getchar()))if(c=='-')f=-1;
x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15);
x*=f;
}
inline void write(int x){
if(x>9)write(x/10);
putchar(x%10+'0');
}
#define print(x) if(x==0)putchar('0');else write(x)
int a[200010],b[200010];
int n,p;
ll sum;
double l=0,r=1e8;
bool check(double mid)
{
double mv=p*mid;
double sum=0;
rep(i,1,n)
{
if(a[i]*mid <= b[i])
continue;
else
sum+= a[i]*mid-b[i];
}
return sum<=mv;
}
int main()
{
read(n),read(p);
rep(i,1,n)
{
read(a[i]),read(b[i]);
sum+=a[i];
}
if(sum<=p)
{
puts("-1");
return 0;
}
while(r-l>1e-8)
{
double mid=(l+r)/2;
if(check(mid))
l=mid;
else
r=mid;
}
printf("%.10f",l);
return 0;
}