読者です 読者をやめる 読者になる 読者になる

Water Tank (AOJ2180)

でんじろう先生じゃない方のWater Tank.こっちは打って変わってクソ簡単.なんで550なの・・・
にぶたんするだけ.しいて言うなら一周では足りないことに注意(二周して減ってるかどうかチェック) まあサンプルで分かるよね

#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define rep1(i,n) for(int i=1;i<=(int)(n);i++)
#define all(c) c.begin(),c.end()
#define pb push_back
#define fs first
#define sc second
#define show(x) cout << #x << " = " << x << endl
#define chmin(x,y) x=min(x,y)
#define chmax(x,y) x=max(x,y)
using namespace std;
int N,s[86400],t[86400],u[86400];
double L;
bool one(double& v,double a){
	int x=0;
	rep(i,N){
		v=min(L,v+(s[i]-x)*a);
		x=s[i];
		v=min(L,v+(t[i]-x)*(a-u[i]));
		if(v<0) return 0;
		x=t[i];
	}
	v=min(L,v+(86400-x)*a);
	return 1;
}
double can(double a){
	double v=L;
	if(!one(v,a)) return 0;
	double v1=v;
	if(!one(v,a)) return 0;
	return abs(v-v1)<1e-9;
}
int main(){
	while(true){
		cin>>N>>L;
		if(N==0) break;
		rep(i,N) cin>>s[i]>>t[i]>>u[i];
		double ub=1e6,lb=0;
		rep(tt,100){
			double m=(ub+lb)/2;
			if(can(m)) ub=m;
			else lb=m;
		}
		printf("%.12f\n",ub);
	}
}