0%

「CF1354C2」Not So Simple Polygon Embedding

题目链接

写在前面

比赛时思路对了,代码挂了(

我真是个人才。

题意

给定 n(n{2k+1kN})n(n\in\{2k+1\mid k\in\mathbb N^*\}),求能包括正 2n2n 边形的正方形的最小边长。

思路

先求出这个多边形的直径,为 1sin1802n\large\frac1{\sin\frac{180^\circ}{2n}}

然后我们看看两个例子。

正六边形

正六边形

容易看出,OAX=AYO+AOY=45+30=75\angle OAX=\angle AYO+\angle AOY=45^\circ+30^\circ=75^\circ

AOY\angle AOY 是怎么得出的呢,它是 36062\large\frac{\frac{360^\circ}6}2,即 1802n\frac{180^\circ}{2n}

正方形边长即为 DH=ADsinOAXDH=AD\cdot\sin\angle OAX

正十边形

正十边形

同理:

OAX=AYO+AOY=45+36=81AOY=2360102=21802nFH=AFsinOAX\begin{aligned} \angle OAX&=\angle AYO+\angle AOY=45^\circ+36^\circ=81^\circ\\ \angle AOY&=\frac{2\cdot\frac{360^\circ}{10}}2=\frac{2\cdot180^\circ}{2n}\\ FH&=AF\cdot\sin\angle OAX \end{aligned}

正 2n 边形

它的最小包括正方形的边长为:

1sin1802nsin(n21802n+45)\frac1{\sin\frac{180^\circ}{2n}}\cdot\sin(\frac{\lfloor\frac n2\rfloor\cdot180^\circ}{2n}+45^\circ)

实现

C++ cmath 库中的三角函数是弧度制的,所以答案为 sin(n2π2n+π4)sinπ2n\large\frac{\sin(\frac{\lfloor\frac n2\rfloor\cdot\pi}{2n}+\frac\pi4)}{\sin\frac\pi{2n}}

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<cstdio>
#include<cmath>
using namespace std;
const double pi=acos(-1);
int t,n;
int main()
{
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
printf("%.8lf\n",sin(pi*(n/2)/n/2+pi/4)/sin(pi/n/2));
}
return 0;
}