链接
题解里的几何做法很巧妙,这里记录一下。
因为有 2n2n2n 条边,每条边对应的角度就是 2π2n\dfrac{2\pi}{2n}2n2π。
考虑对角线与底边平行的状态。顺时针或逆时针转动 π2n\dfrac{\pi}{2n}2nπ 的角度后,对角线会与底边垂直,这就还原成了最开始的状态。
然后因为顺时针和逆时针转是一样的,所以最优解应该在中间取到。
此时旋转的角度为 π4n\dfrac{\pi}{4n}4nπ。取多边形中心 OOO,向底边作垂线,可以得到
12d=rcos(π4n)\frac{1}{2}d=r\cos(\frac{\pi}{4n}) 21d=rcos(4nπ)
其中 ddd 就是所求的正方形边长,然后 rrr 是多边形顶点到中心的距离。
显然
sin(π2n)=12r\sin(\frac{\pi}{2n})=\frac{1}{2r} sin(2nπ)=2r1
所以答案就是 cos(π4n)sin(π2n)\dfrac{\cos(\frac{\pi}{4n})}{\sin(\frac{\pi}{2n})}sin(2nπ)cos(4nπ),即 12sin(π4n)\dfrac{1}{2}\sin(\dfrac{\pi}{4n})21sin(4nπ)。
#include
using namespace std;const double pi = acos(-1);void solve() {int n;cin >> n;cout << 0.5 / sin(pi / (4 * n)) << "\n";
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int T = 1;cin >> T;cout << fixed << setprecision(10);while (T--) {solve();}
}