| 记录编号 | 
        415294 | 
        评测结果 | 
        AAAAAAAAAAAAAAAATATT | 
    
    
        | 题目名称 | 
        964.[NOI 2012]骑行川藏 | 
        最终得分 | 
        85 | 
            
    
    
        | 用户昵称 | 
         sxysxy | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        3.409 s  | 
    
    
        | 提交时间 | 
        2017-06-16 10:18:46 | 
        内存使用 | 
        0.67 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include <cstdio>
#include <cstring>
#include <cstdarg>
#include <list>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
namespace solve{
  
const int MAXN = 10003;
int n;
double E, s[MAXN], k[MAXN], v[MAXN], vp[MAXN];
double maxv[MAXN];
const double eps = 1e-13;
double getv(int pos, double lambda){
  double l = vp[pos], r = maxv[pos];
  while(r - l >= eps){
    double m = (l+r)/2;
    if(fabs(m-l) < eps || fabs(m-r) < eps)break;
    if(m*m*2*lambda*k[pos]*(m-vp[pos])+1 > 0)l = m;
    else r = m;
  }
  return l;
}
double get_sum(){
  double ans = 0;
  for(int i = 1; i <= n; i++)
    ans += s[i]*k[i]*(v[i]-vp[i])*(v[i]-vp[i]);
  return ans-E;
}
void calc_lambda(double l, double r){
  while(r - l >= eps){
    double m = (l+r)/2;
    if(fabs(m-l) < eps || fabs(m-r) < eps)break;
    for(int i = 1; i <= n; i++)
      v[i] = getv(i, m);
    double t = get_sum();
    if(t > 0)r = m;
    else l = m;
  }
}
}
int main(){
  freopen("bicycling.in", "r", stdin);
  freopen("bicycling.out", "w", stdout);
  scanf("%d %lf", &solve::n, &solve::E);
  for(int i = 1; i <= solve::n; i++){
    scanf("%lf %lf %lf", solve::s+i, solve::k+i, solve::vp+i);
    solve::maxv[i] = solve::vp[i]+sqrt(solve::E/solve::s[i]/solve::k[i]);
  }
  solve::calc_lambda(-1000, -solve::eps);
  double ans = 0;
  for(int i = 1; i <= solve::n; i++)
    ans += solve::s[i]/solve::v[i];
  printf("%.8lf\n", ans);
  return 0;
}