链接

题目大意

有一个正 n 面体,初始边长为a,做 k 次下列操作:

每次操作取正 n 面体 n 个面的中心,求它们的凸包,得到新的正 n 面体 求最终物体的面数和边长

思路

1、凸正多面体只有5种

2、立体几何求解: 用立体几何知识对五种情况求出两个面的连心线长度即可,复杂度𝑂(𝑇𝐾)

3、用立体几何知识对五种情况求出两个面的连心线长度即可,复杂度𝑂(𝑇𝐾)

alt

#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;
}