当前位置:网站首页>“蔚来杯“2022牛客暑期多校训练营4 L.Black Hole 垃圾计算几何
“蔚来杯“2022牛客暑期多校训练营4 L.Black Hole 垃圾计算几何
2022-07-30 22:47:00 【HeartFireY】
L.Black Hole
题目大意
给定正 n n n面体(不一定合法,不合法就impossible
),边长为 a a a,进行 k k k次操作,每次操作取正多面体几何中心连线生成新凸壳。问 K K K次操作后生成的是否为正多面体,以及最终正多面体的边长。
首先,合法的正多面体只有:正四面体、正六面体、正八面体、正十二面体、正二十面体。
- 正四面体只能生成正四面体
- 正六面体操作奇数次可以生成正八面体,偶数次生成正六面体
- 正八面体操作奇数次可以生成正六面体,偶数次生成正八面体
- 正十二面体操作奇数次可以生成正二十面体,偶数次生成正十二面体
- 正二十面体操作奇数次可以生成正十二面体,偶数次生成正二十面体
接下来讨论边长变化规律:可以发现两次生成的边长关系可以由原体的内切球和生成体的外接球关系导出,因为这俩球是同一个球。那么首先我们整理一下边长 a a a与球半径 r r r关系公式:
正四面体 | 正六面体 | 正八面体 | 正十二面体 | 正二十面体 | |
---|---|---|---|---|---|
内切球 | r a = 6 12 \frac{r}{a} = \frac{\sqrt{6}}{12} ar=126 | r a = 1 2 \frac{r}{a} = \frac{1}{2} ar=21 | r a = 6 6 \frac{r}{a} = \frac{\sqrt{6}}{6} ar=66 | r a = φ 2 2 3 − φ \frac{r}{a} = \frac{\varphi^2}{2\sqrt{3 - \varphi}} ar=23−φφ2 | r a = 3 3 + 15 12 \frac{r}{a} = \frac{3\sqrt{3} + \sqrt{15}}{12} ar=1233+15 |
外接球 | r a = 6 4 \frac{r}{a} = \frac{\sqrt{6}}{4} ar=46 | r a = 3 2 \frac{r}{a} = \frac{\sqrt{3}}{2} ar=23 | r a = 2 2 \frac{r}{a} = \frac{\sqrt{2}}{2} ar=22 | r a = 3 φ 2 \frac{r}{a} = \frac{\sqrt{3} \varphi}{2} ar=23φ | r a = 10 + 2 5 4 \frac{r}{a} = \frac{\sqrt{10 + 2\sqrt{5}}}{4} ar=410+25 |
那么我们可以推出转换关系:
- 正四面体 → \rightarrow →正四面体: a 2 a 1 = 1 3 \frac{a_2}{a_1} = \frac{1}{3} a1a2=31
- 正六面体 → \rightarrow →正八面体: a 2 a 1 = 1 2 \frac{a_2}{a_1} = \frac{1}{\sqrt{2}} a1a2=21
- 正八面体 → \rightarrow →正六面体: a 2 a 1 = 2 3 \frac{a_2}{a_1} = \frac{\sqrt{2}}{3} a1a2=32
- 正十二面体 → \rightarrow →正二十面体: a 2 a 1 = φ 2 3 − φ × 2 5 + 10 \frac{a_2}{a_1} = \frac{\varphi^2}{\sqrt{3 - \varphi} \times \sqrt{2 \sqrt{5} + 10}} a1a2=3−φ×25+10φ2
- 正二十面体 → \rightarrow →正十二面体: a 2 a 1 = 5 + 3 6 φ \frac{a_2}{a_1} = \frac{\sqrt{5} + 3}{6 \varphi} a1a2=6φ5+3
至此,可以通过递推得到答案。
Code
#include <bits/stdc++.h>
#pragma gcc optimize("O2")
#pragma g++ optimize("O2")
#define int long long
#define double long double
#define endl '\n'
using namespace std;
const int N = 2e5 + 10, MOD = 1e9 + 7;
double K[20];
int nxt[20], n, k;
double a;
void init(){
cout << fixed << setprecision(12);
K[4] = 1.0 / 3;
double fi = (1 + sqrtl(5)) / 2;
K[6] = sqrtl(2) / 2;
K[8] = sqrtl(2) / 3;
K[12] = 2 * fi / sqrtl(3 - fi) * fi / sqrtl(10 + 2 * sqrtl(5));
K[20] = (3 + sqrtl(5)) / 6 / fi;
nxt[4] = 4, nxt[6] = 8, nxt[8] = 6, nxt[12] = 20, nxt[20] = 12;
}
inline void solve(){
cin >> n >> a >> k;
if(n != 4 && n != 6 && n != 8 && n != 12 && n != 20){
cout << "impossible\n";
return;
}
for(int i = 1; i <= k; i++){
a *= K[n], n = nxt[n];
}
cout << "possible "<<n<<" "<<a<<endl;
}
signed main(){
ios_base::sync_with_stdio(false), cin.tie(0);
init();
int t = 1; cin >> t;
while(t--) solve();
return 0;
}
边栏推荐
猜你喜欢
MySQL联合查询(多表查询)
Py's pdpbox: a detailed introduction to pdpbox, installation, and case application
IJCAI2022教程 | 口语语言理解:最新进展和新领域
代码越写越乱?那是因为你没用责任链
Detailed explanation of the delete problem of ClickHouse delete data
A detailed explanation: SRv6 Policy model, calculation and drainage
Rust编译报错:error: linker `cc` not found
【云驻共创】HCSD大咖直播–就业指南
IDEA 连接 数据库
【MySQL】Mysql事务以及权限管理
随机推荐
【翻译】作为混沌网的LFX门徒的经验
win10重建索引
language code table
Abstract classes and interfaces (study notes)
tcp协议传输中的粘包问题
关于XML的学习(一)
IDEA使用技巧
MySQL索引常见面试题(2022版)
Jetson AGX Orin 平台关于c240000 I2C总线和GMSL ses地址冲突问题
MySQL compressed package installation, fool teaching
MySQL连接时出现2003错误
折叠旧版应用程序
ClickHouse to create a database to create a table view dictionary SQL
OpenCV笔记(二十):滤波函数——filter2D
详解操作符
Apache Doris系列之:安装与部署详细步骤
When Navicat connects to MySQL, it pops up: 1045: Access denied for user 'root'@'localhost'
Successfully solved ImportError: always import the name '_validate_lengths'
Py之pdpbox:pdpbox的简介、安装、案例应用之详细攻略
鳄梨价格数据集(Avocado Prices)