黄题WA求助

P3743 小鸟的设备

又改了一下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


|