Problem:
Max Score: $850$ Points

Problem statement

There is a circle which radius is 1.

There are $N$ vertices on the circle's circumference.

The vertices divides into $N$ equal parts over the circumference.

You can choose $3$ distinct vertices, and you can make a triangle.

There are $\frac{N(N - 1)(N - 2)}{6}$ ways choosing vertices.
The question is: Calculate the area of $K$-th smallest triangle in $\frac{N(N-1)(N-2)}{6}$ triangles.

If the area is same, you can order in any order.

If $N = 4, K = 3$, the result is following:

If you select vertices $1$, $2$, and $3$, the area of triangle $= 1$.

If you select vertices $1$, $2$, and $4$, the area of triangle $= 1$.

If you select vertices $1$, $3$, and $4$, the area of triangle $= 1$.

If you select vertices $2$, $3$, and $4$, the area of triangle $= 1$.

As a result, the 3rd smallest triangle's area $= 1$.

Input

The input is given from Standard Input in the following format:

$N \ K$

Output

Please output the $K$-th triangle area.

Print a floating number denoting the answer. The relative or absolute error of your answer should not be higher than $10^{−9}$.

Constraints

$3 \le N \le 200,000$

$1 \le K \le \frac{N(N-1)(N-2)}{6}$

Subtasks

Subtask 1 [ $160$ points ]

$N \le 100$

Subtask 2 [ $240$ points ]

$N \le 1000$

Subtask 3 [ $450$ points ]

$N \le 200,000$

Sample Input 1

4 3

Sample Output 1

1.0000000000000

This example is already explained in the problem statement.

Sample Input 2

6 9

Sample Output 2

0.86602540378

There are $6$ ways to choose a triangle which area is $\frac{\sqrt{3}}{4}$.

There are $10$ ways to choose a triangle which area is $\frac{\sqrt{3}}{2}$.

There are $2$ ways to choose a triangle which area is $\frac{3 \sqrt{3}}{4}$.

Therefore, the 9th smallest triangle's area is $\frac{\sqrt{3}}{2}$.

Sample Input 3

12 220

Sample Output 3

1.29903810568

Writer: E869120

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define REP(i, n, s) for (int i = (s); i < (n); i++)
#define PI 3.141592653589793
#define EPS 1e-15
#define SIZE 200001
using namespace std;
typedef long long int LL;
typedef long double LD;

int N;
LL K;
double s[SIZE];

// Count number of triangles whose area is less than X
// Another point comes right to others.
// i : position of the point
// X : target area size
int count(int i, double X) {
	int all = (N - i) / 2;
	int l = 0, r = all + 1;
	while(r - l > 1) {
		int m = (l + r) / 2;
		double area = (s[i] + s[m] + s[N - i - m]) / 2.0;
//		if (area > X + EPS) r = m;
		if (area > X) r = m;
		else l = m;
	}
	if (r == all + 1) return N - i - 1;
	return l * 2;
}

bool check(double X) {
	LL sum = 0;
	REP(i, N - 1, 1) {
		sum += count(i, X);
	}
	return sum * N >= 3 * K;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> N >> K;
	REP(i, N+1, 0) {
		s[i] = sin(2.0*PI*(double)i/(double)N);
	}
	double l = 0.0, r = 2.0 * PI;
	// (1/2)^50 = 8.881784197001252e-16
	REP(i, 50, 0) {
		double m = (l + r) / 2;
		if (check(m)) r = m;
		else l = m;
	}
	cout << fixed << setprecision(20) << r << endl;
	return 0;
}