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 (Python):
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines

import numpy as np



N,K = map(int,read().split())

import numpy as np

theta = np.pi/N

def test(x):
    
    
    A = np.arange(1,N-1)
    sA = np.sin(A * theta)
    
    
    diff = np.arccos(x/sA - np.cos(A*theta)) / theta
    diff[np.isnan(diff)] = -(N+N)
    upper = np.minimum(N-A-1,(N-A+diff)/2).astype(int)
    lower = (N-A) - upper
    cnt = np.maximum(0, upper - lower + 1).sum()
    return N*((N-1)*(N-2)//2 - cnt) < 3*K

left = 0
right = 4
for _ in range(100):
    x = (left + right)/2
    if test(x):
        left = x
    else:
        right = x
print(x)