| 记录编号 | 
        300812 | 
        评测结果 | 
        AAAAAAAAAAAAAAAAAAAA | 
    
    
        | 题目名称 | 
        964.[NOI 2012]骑行川藏 | 
        最终得分 | 
        100 | 
            
    
    
        | 用户昵称 | 
         FoolMike | 
        是否通过 | 
        通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        1.078 s  | 
    
    
        | 提交时间 | 
        2016-08-29 01:02:03 | 
        内存使用 | 
        0.60 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include<cstdio>
#include<cmath>
using namespace std;
const int N=10010;
const double eps=1e-10;
int n;double Eu,s[N],k[N],v[N],ans[N],c,Max[N];
inline double sqr(double x){return x*x;}
inline double val(int i,double x){return k[i]*x*x*(x-v[i]);}
double solve(int i,double l,double r,double c){//求解方程ki*ansi^2*(ansi-vi)=c 
	if (abs(l-r)<=eps) return l;
	double mid=(l+r)/2;
	return val(i,mid)>c?solve(i,l,mid,c):solve(i,mid,r,c);
}
void A(){
	
}
double erfen(double l,double r){
	if (abs(l-r)<=eps) return l;
	double mid=(l+r)/2,level=val(1,mid),sum=0;
	for (int i=1;i<=n;i++){
		if (i==216) A();
		ans[i]=solve(i,v[i],Max[i],level);
	}
	for (int i=1;i<=n;i++)
		sum+=k[i]*s[i]*sqr(ans[i]-v[i]);
	return sum>Eu?erfen(l,mid):erfen(mid,r);
}
int main()
{
	freopen("bicycling.in","r",stdin);
	freopen("bicycling.out","w",stdout); 
	scanf("%d%lf",&n,&Eu);
	for (int i=1;i<=n;i++){
		scanf("%lf%lf%lf",&s[i],&k[i],&v[i]);
		if (abs(s[i])<=eps) s[i]=eps;
		if (abs(k[i])<=eps) k[i]=eps;
		if (abs(v[i])<=eps) v[i]=eps;
		Max[i]=sqrt(Eu/k[i]/s[i])+v[i];
	}
	c=erfen(v[1],Max[1]);
	double Ans=0,level=val(1,c);
	for (int i=1;i<=n;i++){
		ans[i]=solve(i,v[i],Max[i],level);
		Ans+=s[i]/ans[i];
	}
	printf("%.8lf\n",Ans);
	return 0;
}