码迷,mamicode.com
首页 > 其他好文 > 详细

Educational Codeforces Round 87 (Rated for Div. 2) C1

时间:2020-05-18 00:42:35      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:back   src   cond   ons   namespace   def   syn   info   begin   

题意

给定正多边形的边数为(2 * n, n为偶数), 求最小外接正方形的边长

题解

所以边数是其实是 4 * n, 就意味着这个多边形有四条边在正方形上

每次(n + 1)边数 +4, 就是把左上,左下,右上.右下的边扩展并调整边的长度

技术图片

从(4边形到8边形, n = 1 ~ n = 2) 缩短在正方形边上的边, 并在左上,左下,右上.右下添加新的4条边

技术图片

从(8边形到12边形, n = 2 ~ n = 3) 缩短在正方形边上的边, 并在左上,左下,右上.右下添加新的4条边

所以不论n多大, 都是类似的四条边在正方形上, 两条平行边的距离就是正方形的边长

而这是正多边形, 直接从中心作垂线, 直接算就行, L = (a / 2) / tan(360° / 边数) * 2


#include <bits/stdc++.h>
#define all(n) (n).begin(), (n).end()
#define se second
#define fi first
#define pb push_back
#define mp make_pair
#define sqr(n) (n)*(n)
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef double db;
 
const int N = 1e6 + 5;
 
int n, m, _, k;
int a[N];
 
int main()
{
    //ios::sync_with_stdio(0); cin.tie(0);
    double pi = 3.1415926535898;
    for (cin >> _; _; --_)
    {
        cin >> n; n <<= 1;
        printf("%.6lf\n",  (1.0 / tan(acos(-1) / n)));
    }
    return 0;
}

Educational Codeforces Round 87 (Rated for Div. 2) C1

标签:back   src   cond   ons   namespace   def   syn   info   begin   

原文地址:https://www.cnblogs.com/2aptx4869/p/12907690.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!