大致题意:

给出六条边,判断是否能组成四面体

分析:

四面体由四个三角形组成,所以每一条边肯定要符合三角形的任意两边大于第三边的性质。一开始以为这样判断就可以了,然而这题并没有这么简单。

如右图,有四个三角形,六条边,但是并不是四面体

如下图,先选择五条边(绿色的五条边),然后展开成一个平面,三角形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的更多相关文章

  1. 地大邀请赛d

    Problem D: Tetrahedron Inequality Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 15   Solved: 3 [ ...

  2. INEQUALITY BOOKS

    来源:这里 Bất Đẳng Thức Luôn Có Một Sức Cuốn Hút Kinh Khủng, Một Số tài Liệu và Sách Bổ ích Cho Việc Học ...

  3. ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力

     Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Fo ...

  4. ACM: Gym 101047K Training with Phuket's larvae - 思维题

     Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO F ...

  5. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  6. ACM: Gym 101047B Renzo and the palindromic decoration - 手速题

     Gym 101047B  Renzo and the palindromic decoration Time Limit:2000MS     Memory Limit:65536KB     64 ...

  7. Gym 101102J---Divisible Numbers(反推技巧题)

    题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an a ...

  8. Gym 100917J---Judgement(01背包+bitset)

    题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury ...

  9. Gym 100917J---dir -C(RMQ--ST)

    题目链接 http://codeforces.com/gym/100917/problem/D problem description Famous Berland coder and IT mana ...

随机推荐

  1. 分析Red Hat sosreport输出的方法

    分析Red Hat sosreport输出的方法? Modified on: Fri, 31 May 2019 20:20:02 +0800 有一段时间(自EL 4.6以来),Red Hat嵌入了sy ...

  2. Msf--控制 Android手机

    |>>>中华人民共和国网络安全法<<<|警告:请勿用于非法用途,后果自负! 0.环境 虚拟机 KaliLinux 手机 Redmi 6A 同一局域网下 1.查看控制 ...

  3. 015.Python函数名的使用以及函数变量的操作

    一 函数名的使用 python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限 1.1 函数名是个特殊的变量,可以当做变量赋值 def func(): p ...

  4. Linux 核心系统命令目录

    S5 Linux信息显示与搜索文件命令 S6 文件备份与压缩命令 S7 Linux用户管理及用户信息查询命令 S8 Linux磁盘与文件系统管理命令 S9 Linux 进程管理命令 S10 Linux ...

  5. 【错误解决】The prefix "context" for element "context:component-scan" is not bound

    在配置spring相关的applicationContext.xml文件时报以上错误 原因是缺失context的namespace. http://www.springframework.org/sc ...

  6. 使用 JavaScript 将 HTML 转换为 PDF

    使用 JavaScript 将 HTML 转换为 PDF 更多相关学习资料参见http://www.pdfdownload.cn/b/ba_index.php 在本文中,我们将了解如何在浏览器(即完全 ...

  7. elasticsearch_dsl 操作

    import elasticsearch from elasticsearch_dsl import Search, MultiSearch # Search-执行一个搜索,MultiSearch-同 ...

  8. Go语言的GOPATH详解

    在GOLAND中设置GOPATH: 设置好路径后,并不是直接在这个路径下面写代码文件就行了 GO会识别GOPATH下的src目录,而真正的引用的包名,是src下的目录名,然后才是代码模块名 目录结构如 ...

  9. FCN与U-Net语义分割算法

    FCN与U-Net语义分割算法 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支.语义分割即是对图像中每一 ...

  10. MindSpore特性支持类

    MindSpore特性支持类 Q:请问MindSpore支持梯度截断吗? A:支持,可以参考梯度截断的定义和使用. Q:如何在训练神经网络过程中对计算损失的超参数进行改变? A:暂时还未有这样的功能. ...