Codeforces C1. Simple Polygon Embedding (数学计算几何) (Round 87 Rated for Div.2)

    技术2024-01-07  97

    传送门

    题意: 找到能放下正n(n为偶数)边形的最小正方形的边长。 思路:

    要想正方形最小,则得与多边形内切;因此多边形必定与正方形始终有4条边相切,且每次增加边都是四个角的四个角的倍数(即2 * 2)那么很容易就能找到每条边对应的内角为 π / 2n再利用三角形的相关公式便能求到内心到每条边的距离(或者高),答案就是高的二倍

    代码实现:

    #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <ctime> #include <cctype> #include <cstring> #include <iostream> #include <sstream> #include <string> #include <list> #include <vector> #include <set> #include <map> #include <queue> #include <stack> #include <algorithm> #include <functional> #define endl '\n' #define null NULL #define ll long long #define int long long #define pii pair<int, int> #define lowbit(x) (x &(-x)) #define ls(x) x<<1 #define rs(x) (x<<1+1) #define me(ar) memset(ar, 0, sizeof ar) #define mem(ar,num) memset(ar, num, sizeof ar) #define rp(i, n) for(int i = 0, i < n; i ++) #define rep(i, a, n) for(int i = a; i <= n; i ++) #define pre(i, n, a) for(int i = n; i >= a; i --) #define IOS ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; using namespace std; const int inf = 0x7fffffff; const double Pi = acos(-1.0); const double eps = 1e-6; const ll mod = 1e9 + 7; const int N = 2e5 + 5; int t, n; signed main() { cin >> t; while(t --){ cin >> n; double ans = 1.0 / tan((Pi / (2 * n))); printf("%.9f\n", ans); } return 0; }
    Processed: 0.010, SQL: 9