大致题意:

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

分析:

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

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

如下图,先选择五条边(绿色的五条边),然后展开成一个平面,三角形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. lambda,filter,map,reduce

    # lambda,filter,map,reduce from functools import reduce print('返回一个迭代器') print((x) for x in range(5) ...

  2. Linux进阶之给nginx设置登录用户验证

    一.nginx开启访问验证 使用nginx搭建的站点,如果不想让所有人都能正常访问,那么可以设置访问认证,只有用户输入正确的用户名和密码才能正常访问. 在nginx下,提供了ngx_http_auth ...

  3. Modbus RTU CRC校验码计算方法

    在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算. CRC计算方法是: 1.  加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器. 2.   ...

  4. Java 事务的隔离级别

    引言 之前关于事务的文章已介绍了事务的概念以及事务的四个属性(ACID),相信你对事务应该有所认识和了解. 本篇文章是关于事务的隔离性,介绍数据库提供的多种隔离级别. 数据库访问的并发性问题 所谓事务 ...

  5. STM32F1移植UCOSII

    作者:珵旭媛 下载对应版本的UCOSII https://www.micrium.com/downloadcenter/,你会少修改很多东西: 下载下来后是这样的文件夹,并且Software里面的才是 ...

  6. 10.11 arping:发送arp请求

    arping命令 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包检查局域网内所有设备的硬件地址.  arping 命令的参数选项及说明 -c <次数>       ...

  7. Jquery 常用方法及实例(Day_15)

    想要做一件事,永远都不要怕晚.只要你开始做了,就不晚. 而若是你不开始,仅仅停留在思考.犹豫甚至焦虑的状态,那就永远都是零. mouseover() / mouserout() 当鼠标进入 / 离开某 ...

  8. 原子层沉积(ALD)和化学气相沉积(CVD)微电子制造铜金属化的研究进展

    原子层沉积(ALD)和化学气相沉积(CVD)微电子制造铜金属化的研究进展 Atomic Layer Deposition (ALD) and Chemical Vapor Deposition (CV ...

  9. MLIR多级中间表示概述

    MLIR多级中间表示概述 MLIR项目是构建可重用和可扩展的编译器基础设施的一种新方法.MLIR旨在解决软件碎片化问题,改进异构硬件的编译,显著降低构建特定领域编译器的成本,并帮助将现有编译器连接在一 ...

  10. 源码简析Spring-Integration执行过程

    一,前言 Spring-Integration基于Spring,在应用程序中启用了轻量级消息传递,并支持通过声明式适配器与外部系统集成.这一段官网的介绍,概况了整个Integration的用途.个人感 ...