40. CF-Not So Simple Polygon Embedding

链接

题解里的几何做法很巧妙,这里记录一下。

因为有 2 n 2n 2n 条边,每条边对应的角度就是 2 π 2 n \dfrac{2\pi}{2n} 2n2π

考虑对角线与底边平行的状态。顺时针或逆时针转动 π 2 n \dfrac{\pi}{2n} 2nπ 的角度后,对角线会与底边垂直,这就还原成了最开始的状态。

然后因为顺时针和逆时针转是一样的,所以最优解应该在中间取到。

此时旋转的角度为 π 4 n \dfrac{\pi}{4n} 4nπ。取多边形中心 O O O,向底边作垂线,可以得到

1 2 d = r cos ⁡ ( π 4 n ) \frac{1}{2}d=r\cos(\frac{\pi}{4n}) 21d=rcos(4nπ)

其中 d d d 就是所求的正方形边长,然后 r r r 是多边形顶点到中心的距离。

显然

sin ⁡ ( π 2 n ) = 1 2 r \sin(\frac{\pi}{2n})=\frac{1}{2r} sin(2nπ)=2r1

所以答案就是 cos ⁡ ( π 4 n ) sin ⁡ ( π 2 n ) \dfrac{\cos(\frac{\pi}{4n})}{\sin(\frac{\pi}{2n})} sin(2nπ)cos(4nπ),即 1 2 sin ⁡ ( π 4 n ) \dfrac{1}{2}\sin(\dfrac{\pi}{4n}) 21sin(4nπ)

#include <bits/stdc++.h>
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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值