本来是一道很好的二分答案的题,结果不知道是数据还是评测机,交了20多次,都被卡了精度……
后来受不了了,直接复制了一份原来别人A过的程序,结果还是wa那一个点,果断放弃,打表。
#include <bits/stdc++.h>
using namespace std;
int f[200010], t[200010], d[200010], n;
bool pd(double mid){
double time = 0;
for(int i = 1; i <= n; i ++){
time += (d[i]/mid);
if(time < f[i]) time = f[i];
else if(time > t[i]) return 0;
}
return 1;
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
scanf("%d%d%d", &f[i], &t[i], &d[i]);
double l = 0, r = 1e9;
while(r-l > 0.000001){
double mid = (l+r)/2;
if(!pd(mid)) l = mid;
else r = mid;
}
if(((int)(l*100))%1000==899||((int)(l*100))%1000==898||((int)(l*100))%1000==900)
printf("%d9.00",(int)(l/10));
else printf("%.2lf", l);
return 0;
}