Problem:
Score : 600 points

Problem Statement

Takahashi wants to grill N pieces of meat on a grilling net, which can be seen as a two-dimensional plane. The coordinates of the i-th piece of meat are \left(x_i, y_i\right), and its hardness is c_i.

Takahashi can use one heat source to grill the meat. If he puts the heat source at coordinates \left(X, Y\right), where X and Y are real numbers, the i-th piece of meat will be ready to eat in c_i \times \sqrt{\left(X - x_i\right)^2 + \left(Y-y_i\right)^2} seconds.

Takahashi wants to eat K pieces of meat. Find the time required to have K or more pieces of meat ready if he put the heat source to minimize this time.

Constraints

All values in input are integers.

1 \leq N \leq 60

1 \leq K \leq N

-1000 \leq x_i , y_i \leq 1000

\left(x_i, y_i\right) \neq \left(x_j, y_j\right) \left(i \neq j \right)

1 \leq c_i \leq 100

Input

Input is given from Standard Input in the following format:

N K
x_1 y_1 c_1
\vdots
x_N y_N c_N

Output

Print the answer.

It will be considered correct if its absolute or relative error from our answer is at most 10^{-6}.

Sample Input 1

4 3
-1 0 3
0 0 3
1 0 2
1 1 40

Sample Output 1

2.4

If we put the heat source at \left(-0.2, 0\right), the 1-st, 2-nd, and 3-rd pieces of meat will be ready to eat within 2.4 seconds. This is the optimal place to put the heat source.

Sample Input 2

10 5
-879 981 26
890 -406 81
512 859 97
362 -955 25
128 553 17
-885 763 2
449 310 57
-656 -204 11
-270 76 40
184 170 16

Sample Output 2

7411.2252

Solution in JavaScript (node.js v5.12) (judge verdict: Wrong Answer)

"use strict";
var input=require("fs").readFileSync("/dev/stdin","utf8");
var cin=input.split(/ |\n/),cid=0;
function next(a){return a?cin[cid++]:+cin[cid++];}
function nexts(n,a){return a?cin.slice(cid,cid+=n):cin.slice(cid,cid+=n).map(a=>+a);}
function nextm(h,w,a){var r=[],i=0;if(a)for(;i<h;i++)r.push(cin.slice(cid,cid+=w));else for(;i<h;i++)r.push(cin.slice(cid,cid+=w).map(a=>+a));return r;}
function xArray(v){var a=arguments,l=a.length,r="Array(a["+--l+"]).fill().map(x=>{return "+v+";})";while(--l)r="Array(a["+l+"]).fill().map(x=>"+r+")";return eval(r);}

var myOut = main();
if(myOut !== undefined)console.log(myOut);

function main(){
  var n = next(), k = next();
  if(k === 1)return 0;
  var c = nextm(n,3);
  var ans = 1e9;
  for(var i = 0; i < n; i++){
    var q = [[0,i]], x = c[i][0], y = c[i][1];
    for(var j = 0; j < n; j++){
      if(i === j)continue;
      q.push([solve(x,y,c[j]),j]);
    }
    q.sort((a,b)=>a[0]-b[0]);
    var cost = q[k-1][0];
    var l = 500;
    while(l > 1e-7){
      var d = solve2(x,y,c[q[k-1][1]]), q2 = [], f = 1;
      var xd = x - d[0]*l, yd = y - d[1]*l;
      for(var j = 0; j < k && f; j++){
        var t = solve(xd,yd,c[q[j][1]]);
        if(cost < t)f = 0;
        else q2.push([t,q[j][1]]);
      }
      if(f){
        q2.sort((a,b)=>a[0]-b[0]);
        cost = q2[k-1][0];
        q = q2;
        x = xd, y = yd;
      }else{
        l /= 2;
      }
    }
    if(cost < ans)ans = cost
  }
  return ans;
}

function solve(x,y,a){
  var x1 = a[0], y1 = a[1], c1 = a[2];
  var dx = x-x1, dy = y-y1;
  return c1 * Math.sqrt(dx*dx + dy*dy);
}

function solve2(x,y,a){
  var x1 = a[0], y1 = a[1];
  var dx = x-x1, dy = y-y1;
  var l = Math.sqrt(dx*dx + dy*dy);
  return [dx/l , dy/l];
}