首页 > 代码库 > Gym 100169E Tetrahedron Inequality
Gym 100169E Tetrahedron Inequality
大致题意:
给出六条边,判断是否能组成四面体
分析:
四面体由四个三角形组成,所以每一条边肯定要符合三角形的任意两边大于第三边的性质。一开始以为这样判断就可以了,然而这题并没有这么简单。
如右图,有四个三角形,六条边,但是并不是四面体
如下图,先选择五条边(绿色的五条边),然后展开成一个平面,三角形ABC和三角形ACD不重叠(重叠),此时只要将三角形ABC绕着AC轴旋转,BD即第六条边。所以展开成平面可求除最大值(最小值)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <map>#include <cmath>using namespace std;const int maxn=10000+5;int a[6];int edge[6];bool flag[6];bool isTriangle(int x,int y,int z){ return x+y>z && x+z>y && y+z>x;}bool isTetrahedron(){ double BD=edge[0]/1000.0; double AB=edge[1]/1000.0; double AD=edge[2]/1000.0; double CD=edge[3]/1000.0; double BC=edge[4]/1000.0; double AC=edge[5]/1000.0; //方法一:角度数求出来 double ABD=acos((AB*AB+BD*BD-AD*AD)/(2*AB*BD)); double CBD=acos((BC*BC+BD*BD-CD*CD)/(2*BC*BD)); double minAC=sqrt(AB*AB+BC*BC-2*AB*BC*cos(ABD+CBD)); double maxAC=sqrt(AB*AB+BC*BC-2*AB*BC*cos(ABD-CBD)); if(minAC>maxAC) swap(minAC,maxAC); //方法二: /*double cosABD=(AB*AB+BD*BD-AD*AD)/(2*AB*BD); double cosCBD=(BC*BC+BD*BD-CD*CD)/(2*BC*BD); double sinABD=sqrt(1-cosABD*cosABD); double sinCBD=sqrt(1-cosCBD*cosCBD); double cosABC=cosABD*cosCBD-sinABD*sinCBD; double maxAC=sqrt(AB*AB+BC*BC-2*AB*BC*cosABC); cosABC=cosABD*cosCBD+sinABD*sinCBD; double minAC=sqrt(AB*AB+BC*BC-2*AB*BC*cosABC);*/ return AC>minAC && AC<maxAC;}bool dfs(int cnt){ if(cnt==3) if(!isTriangle(edge[0],edge[1],edge[2])) return false; if(cnt==6) return isTriangle(edge[0],edge[3],edge[4]) && isTriangle(edge[1],edge[4],edge[5]) && isTriangle(edge[2],edge[4],edge[5]) && isTetrahedron(); for(int i=0; i<6; i++) if(!flag[i]) { flag[i]=1; edge[cnt]=a[i]; if(dfs(cnt+1)) return true; flag[i]=0; } return false;}int main(){ //freopen("in.txt","r",stdin); int n; scanf("%d",&n); while(n--) { for(int i=0; i<6; i++) scanf("%d",&a[i]); memset(flag,0,sizeof(flag)); printf("%s\n",dfs(0)? "YES":"NO"); } return 0;}
Gym 100169E Tetrahedron Inequality
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。