大致题意:

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

分析:

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

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

如下图,先选择五条边(绿色的五条边),然后展开成一个平面,三角形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. Docker Swarm(六)Label 节点标签与服务约束

    前言 多节点 Swarm 集群下,可能节点的配置不同(比如 CPU.内存等),部署着不同类型的服务(比如 Web服务.Job服务等),当这些服务以 Service 或者 Stack 的形式部署到集群, ...

  2. 克隆并编译otter

    源码编译: git clone 项目到本地,用IDEA打开,等待Maven下载完jar包,打开命令行,进入当前项目的lib目录 执行install.bat命令,该批处理文件会将缺失的jar包安装到你本 ...

  3. devgridContral

    #region 加载gridControl布局项        /// <summary>        /// 加载gridControl布局项        /// </summ ...

  4. ffmpeg安装之mac安装

    转发自白狼栈:查看原文 关于ffmpeg的安装,有的人可能要折腾很久,甚至折腾一个礼拜,究其原因,基本都是编译安装惹的祸. 我们提供4种安装方式,最复杂的莫过于centos7上的编译安装. ffmpe ...

  5. .NET6系列:C#10新功能预览

    系列目录     [已更新最新开发文章,点击查看详细] 2021年4月19日微软发布公告称将于今年夏季发布首款64位的 Visual Studio 2022,2021年5月20日又发布了 Visual ...

  6. 写Bug时,需要注意的几点 02

    重构2-重新组织函数 重构的基本技巧--小步前进,频繁测试. 模式是你希望到达的目标,重构则是到达之路. 在单进程软件中,你永远不必操心多么频繁地调用某个函数,因为函数的调用成本很低.但在分布式软件中 ...

  7. git&nodejs安装教程

    git https://www.cnblogs.com/ximiaomiao/p/7140456.html nodejs https://jingyan.baidu.com/article/e7505 ...

  8. 自定义 DataLoader

    自定义 DataLoader 如 数据输入 一文所介绍,OneFlow 支持两种数据加载方式:直接使用 NumPy 数据或者使用 DataLoader 及其相关算子. 在大型工业场景下,数据加载容易成 ...

  9. 目标检测数据集The Object Detection Dataset

    目标检测数据集The Object Detection Dataset 在目标检测领域,没有像MNIST或Fashion MNIST这样的小数据集.为了快速测试模型,我们将组装一个小数据集.首先,我们 ...

  10. 2019个嵌入式市场研究,持续的C/C++优势

    2019个嵌入式市场研究,持续的C/C++优势 2019 Embedded Markets Study reflects emerging technologies, continued C/C++ ...