直接按离原点距离排序,然后累加达到S后打印退出。注意用long来存储S,二分的提示可以忽略。

import java.util.*;

class Point
{
    int x,y,v;
    double d;
    Point(int x,int y,int v)
    {
        this.x=x;
        this.y=y;
        this.v=v;
    }

    @Override
    public String toString()
    {
        return String.format("Point(x=%d,y=%d)",x,y);
    }
}



// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static double dis(Point p1,Point p2)
    {
        double ans=0.0;
        ans=Math.sqrt(Math.pow((p1.x-p2.x),2)+Math.pow((p1.y-p2.y),2));
        return ans;
    }

    public static void main(String[] args) {

        // Point p[]=new Point[100000];
        ArrayList<Point> p=new ArrayList<>();
        long s=0;
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            long b = in.nextLong();
            s=b;
            // System.out.println(a + b);
            int index=0;
            while(a-->0)
            {
                p.add(new Point(in.nextInt(),in.nextInt(),in.nextInt()));
            }
        }
        Point base=new Point(0,0,0);
        for(Point tmp:p)
        {
            tmp.d=dis(tmp,base);
        }
        p.sort(Comparator.comparingDouble(point->point.d));
        // p.forEach(System.out::println);
        long sum=0;
        for(int i=0;i<p.size();++i)
        {
            sum+=p.get(i).v;
            if(sum>=s)
            {
                System.out.println(p.get(i).d);
                break;
            }
        }
        if(sum<s)System.out.println(-1);
        return;
    }
}