题目大意
有一个正 n 面体,初始边长为a,做 k 次下列操作:
每次操作取正 n 面体 n 个面的中心,求它们的凸包,得到新的正 n 面体 求最终物体的面数和边长
思路
1、凸正多面体只有5种
2、立体几何求解: 用立体几何知识对五种情况求出两个面的连心线长度即可,复杂度𝑂(𝑇𝐾)
3、用立体几何知识对五种情况求出两个面的连心线长度即可,复杂度𝑂(𝑇𝐾)
#include<bits/stdc++.h>
using namespace std;
double f[250],h;
int n,to[250];
int t;
int x,k;
double a;
int main(){
to[4]=4,to[6]=8,to[8]=6,to[12]=20,to[20]=12;
f[4]=1.0/3;
f[6]=sqrt(0.5);
f[8]=sqrt(2.0/9);
h=sqrt(5);
f[12]=sqrt(2/(35-15*h));
f[20]=(1+h)/6;
scanf("%d",&t);
while (t--){
scanf("%d %lf %d",&x,&a,&k);
if (!to[x]){
printf("impossible\n");
continue;
}
printf("possible ");
while (k--){
a*=f[x],x=to[x];
}
printf("%d %.11lf\n",x,a);
}
return 0;
}