又改了一下85了 \#16\#18WA,\#19TLE
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef double dint;
const int N = 1e5+5;
/*
1)在验证一个使用时间时,若设备已有的能量大于使用时间需要的能量,忽略该设备。
2)否则用充电器充电,使设备已有的能量等于使用时间需要的能量,并记录需要的能量。
3)最后比较需要的能量总和和充电器最多提供的能量。
*/
int n,p,wind_kaka;
dint a[N],b[N];
//二分使用时间(use time)
bool check(dint ut){
dint sum = 0;
dint ans = ut*p;
for(int i = 1; i <= n; i++){
if(b[i] >= a[i]*ut)
continue;
sum += a[i]*ut-b[i];
}
return ans >= sum;
}
int main() {
scanf("%d %d",&n,&p);
for(int i = 1; i <= n; i++){
scanf("%lf %lf",&a[i],&b[i]);
wind_kaka += a[i];
}
if(wind_kaka <= p){
printf("-1\n");
return 0;
}
dint l = 0,r = (dint)1e10;
while(r-l > 1e-7){
dint mid = (l + r) / 2.0;
if(check(mid))
l = mid;
else r = mid;
}
printf("%lf\n",l);
return 0;
}
```
by ragwort @ 2023-01-10 21:38:18
又改了一下没TLE了
```cpp
#include <bits/stdc++.h>
using namespace std;
typedef double dint;
const int N = 1e5+5;
/*
1)在验证一个使用时间时,若设备已有的能量大于使用时间需要的能量,忽略该设备。
2)否则用充电器充电,使设备已有的能量等于使用时间需要的能量,并记录需要的能量。
3)最后比较需要的能量总和和充电器最多提供的能量。
*/
int n,p,wind_kaka;
dint a[N],b[N];
//二分使用时间(use time)
bool check(dint ut){
dint sum = 0;
dint ans = ut*p;
for(int i = 1; i <= n; i++){
if(b[i] >= a[i]*ut)
continue;
sum += a[i]*ut-b[i];
}
return ans >= sum;
}
int main() {
scanf("%d %d",&n,&p);
for(int i = 1; i <= n; i++){
scanf("%lf %lf",&a[i],&b[i]);
wind_kaka += a[i];
}
if(wind_kaka <= p){
printf("-1\n");
return 0;
}
dint l = 0,r = (dint)1e10;
while(r-l > 1e-6){
dint mid = (l + r) / 2.0;
if(check(mid))
l = mid;
else r = mid;
}
printf("%lf\n",l);
return 0;
}
```
by ragwort @ 2023-01-10 21:39:17
全部改double就行了
by ragwort @ 2023-01-10 21:53:46