C2. Not So Simple Polygon Embedding
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
The statement of this problem is the same as the statement of problem C1. The only difference is that, in problem C1, n is always even, and in C2, n is always odd.
You are given a regular polygon with 2⋅n vertices (it’s convex and has equal sides and equal angles) and all its sides have length 1. Let’s name it as 2n-gon.
Your task is to find the square of the minimum size such that you can embed 2n-gon in the square. Embedding 2n-gon in the square means that you need to place 2n-gon in the square in such way that each point which lies inside or on a border of 2n-gon should also lie inside or on a border of the square.
You can rotate 2n-gon and/or the square.
Input
The first line contains a single integer T (1≤T≤200) — the number of test cases.
Next T lines contain descriptions of test cases — one per line. Each line contains single odd integer n (3≤n≤199). Don’t forget you need to embed 2n-gon, not an n-gon.
Output
Print T real numbers — one per test case. For each test case, print the minimum length of a side of the square 2n-gon can be embedded in. Your answer will be considered correct if its absolute or relative error doesn’t exceed 10−6.
Example
inputCopy
3
3
5
199
outputCopy
1.931851653
3.196226611
126.687663595
char s[300010];
const long double PI = 3.14159265358979323846;
int main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
long double o = PI / n;
long double L = (long double)0.5 / sin(o / 2);
long double l = 0, r = L - cos(o / 2) * L;
while(r - l > eps) {
long double deL = (l + r) / 2;
long double deo = acos((L - deL) / L);
if(L * cos(o / 2 - deo) <= L - deL)
l = deL;
else
r = deL;
}
cout << seteps(10) << 2 * (L - l) << endl;
}
}