直接按离原点距离排序,然后累加达到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;
}
}

京公网安备 11010502036488号