Codeforces Round #242 (Div. 2) B. Megacity

http:、、codeforces.com/contest/424/problem/B
B. Megacity
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

The administration of the Tomsk Region firmly believes that it's time to become a megacity (that is, get population of one million). Instead of improving the demographic situation, they decided to achieve its goal by expanding the boundaries of the city.

The city of Tomsk can be represented as point on the plane with coordinates (00). The city is surrounded with n other locations, the i-th one has coordinates (xiyi) with the population of ki people. You can widen the city boundaries to a circle of radius r. In such case all locations inside the circle and on its border are included into the city.

Your goal is to write a program that will determine the minimum radius r, to which is necessary to expand the boundaries of Tomsk, so that it becomes a megacity.

Input

The first line of the input contains two integers n and s (1 ≤ n ≤ 1031 ≤ s < 106) — the number of locatons around Tomsk city and the population of the city. Then n lines follow. The i-th line contains three integers — the xi and yi coordinate values of the i-th location and the number ki of people in it (1 ≤ ki < 106). Each coordinate is an integer and doesn't exceed 104 in its absolute value.

It is guaranteed that no two locations are at the same point and no location is at point (0; 0).

Output

In the output, print "-1" (without the quotes), if Tomsk won't be able to become a megacity. Otherwise, in the first line print a single real number — the minimum radius of the circle that the city needs to expand to in order to become a megacity.

The answer is considered correct if the absolute or relative error don't exceed 10 - 6.

Sample test(s)
input
4 999998
1 1 1
2 2 1
3 3 1
2 -2 1
output
2.8284271
input
4 999998
1 1 2
2 2 1
3 3 1
2 -2 1
output
1.4142136
input
2 1
1 1 999997
2 2 1
output
-1

第一次写解题报告。- -!

这道题的大概意思就是从(0,0)点开始扩张,包括的点的人数和自己本来的人数的总和大于或者等于1000000,就可以成为megacity,否则的话就输出-1。

在输入的时候就把所有的人口加起来,然后判断是不是大于等于1000000,是的话就可以,否则的话就输出-1;

简单的方法就是在输入的时候把每个点距离远点的长度计算出来,然后用qsort排序,qsort可以自己写比较函数,可以排序自己写的结构体,虽然用着比sort麻烦一点,但是比较自由。

还有一个地方就是:计算距离的时候,可以先不要开方,就直接存x²+y²,然后在写compare函数的时候,就比较简单。开始的时候我就先开方,然后就错了好多次…………

#include
#include
#include
#include
using namespace std;
//按到原点的距离排序(这个地方的排序可以先不开方,就用平方排序,然后在最后输出的时候才开方,否则的话误差会很大)
struct city
{
	int x;
	int y;
	int a;
	double r;
};
int comp(const void *a,const void *b)
{
	return (*(city*)a).r - (*(city*)b).r;
	//return  ((*(city*)a).r - (*(city*)b).r) * 10000000;
}
int main()
{
	int n;
	city a[1000];
	int isbig;
	int sum;
	scanf("%d%d",&n,&sum);
	isbig = sum;
	double max = 0;
	int i;
	for(i=0;i=1000000)
	{
		qsort(a,n,sizeof(city),comp);
		for(i=0;i


你可能感兴趣的:(Codeforces Round #242 (Div. 2) B. Megacity)