C1. Simple Polygon Embedding

该问题要求找到能容纳一个2n边的正多边形的最小正方形的面积,其中n为偶数。正多边形的所有边长均为1,并且可以旋转。输出对于每个测试用例,最小正方形的边长平方,答案需要精确到10^-6。

链接:https://codeforces.ml/contest/1354/problem/C1

The statement of this problem is the same as the statement of problem C2. The only difference is that, in problem C1, nn is always even, and in C2, nn is always odd.

You are given a regular polygon with 2⋅n2⋅n vertices (it's convex and has equal sides and equal angles) and all its sides have length 11. Let's name it as 2n2n-gon.

Your task is to find the square of the minimum size such that you can embed 2n2n-gon in the square. Embedding 2n2n-gon in the square means that you need to place 2n2n-gon in the square in such way that each point which lies inside or on a border of 2n2n-gon should also lie inside or on a border of the square.

You can rotate 2n2n-gon and/or the square.

Input

The first line contains a single integer TT (1≤T≤2001≤T≤200) — the number of test cases.

Next TT lines contain descriptions of test cases — one per line. Each line contains single even integer nn (2≤n≤2002≤n≤200). Don't forget you need to embed 2n2n-gon, not an nn-gon.

Output

Print TT real numbers — one per test case. For each test case, print the minimum length of a side of the square 2n2n-gon can be embedded in. Your answer will be considered correct if its absolute or relative error doesn't exceed 10−610−6.

Example

input

Copy

3
2
4
200

output

Copy

1.000000000
2.414213562
127.321336469

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
#include<algorithm>
using namespace std;
#define ll long long
#define lb long double
#define INF 0x3f3f3f3f
#define pi 3.1415926535897932384626
ll n,m,k,t,s,min1;
ll a,b,c,d;
char x[200001];
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		double x=pi/(2*n);
		double ans;
		ans=1.0/(sin(x)*1.0/cos(x));
		printf("%.9lf\n",ans);
	}
}

 

flyToPoint(data){ // 优化版:改进多边形中心计算并添加高度偏移 let _this = this; const dataSources = _this.viewer.dataSources._dataSources; let lengthSources = dataSources.length; for (let f = lengthSources - 1; f >= 0; f--) { var entities = dataSources[f].entities.values; entities.forEach(item=>{ item._polygon.material.color.alpha = 0.5 item._polygon.material.color.blue = 0.2235294117647059 item._polygon.material.color.green = 0.7843137254901961 item._polygon.material.color.red = 1 }) const newEnity = entities.find(item => item.properties && item.properties.gridcode && item.properties.gridcode._value == data.gridCode ); if (!newEnity || !newEnity._polygon || !newEnity._polygon.hierarchy) { continue; // 跳过无效实体 } newEnity._polygon.material = new Cesium.ColorMaterialProperty( new Cesium.Color.fromBytes(222, 67, 41, 128) ); const hierarchy = newEnity._polygon.hierarchy._value; let centerPosition; // 优先使用边界框中心(更准确) if (hierarchy.positions && hierarchy.positions.length > 0) { // 使用边界框计算中心(考虑地形起伏) const boundingSphere = Cesium.BoundingSphere.fromPoints(hierarchy.positions); centerPosition = boundingSphere.center; // 或者使用Cesium提供的多边形中心计算工具 // centerPosition = Cesium.PolygonPipeline.computeCenter(hierarchy.positions); } else { // 回退到简单平均法 const positions = hierarchy.positions || []; centerPosition = this.calculatePolygonCenter(positions); } // 将笛卡尔坐标转换为经纬度高度 const cartographic = Cesium.Cartographic.fromCartesian(centerPosition); // 添加高度偏移(例如100米),避免被地形遮挡 cartographic.height += 20; // 转回笛卡尔坐标 centerPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographic); // 增加事件标签和网格员的信息 var obj = { name: data.name, value: { '网格名称': data.name, '网格面积': data.gridArea + '㎡', '地址': data.address, '网格员': data.names, '网格员电话':data.phoneNumber, // '事件总数':data. } }; // 创建弹窗并设置高度 _this.createPopup(data.id, centerPosition, obj); // 飞行到该实体,设置适当的视角 this.viewer.flyTo(newEnity, { duration: 0.2, offset: new Cesium.HeadingPitchRange( 0, // 航向角 -Cesium.Math.toRadians(45), // 俯仰角(俯视) 500 // 距离(米),可根据需要调整 ) }); } } 之前的颜色没有回复成之前的
最新发布
07-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值