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的更多相关文章
- 地大邀请赛d
Problem D: Tetrahedron Inequality Time Limit: 1 Sec Memory Limit: 128 MB Submit: 15 Solved: 3 [ ...
- 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 ...
- 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 ...
- ACM: Gym 101047K Training with Phuket's larvae - 思维题
Gym 101047K Training with Phuket's larvae Time Limit:2000MS Memory Limit:65536KB 64bit IO F ...
- ACM: Gym 101047E Escape from Ayutthaya - BFS
Gym 101047E Escape from Ayutthaya Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- ACM: Gym 101047B Renzo and the palindromic decoration - 手速题
Gym 101047B Renzo and the palindromic decoration Time Limit:2000MS Memory Limit:65536KB 64 ...
- Gym 101102J---Divisible Numbers(反推技巧题)
题目链接 http://codeforces.com/gym/101102/problem/J Description standard input/output You are given an a ...
- Gym 100917J---Judgement(01背包+bitset)
题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury ...
- Gym 100917J---dir -C(RMQ--ST)
题目链接 http://codeforces.com/gym/100917/problem/D problem description Famous Berland coder and IT mana ...
随机推荐
- 列表 元组 sort
列表 增append insert extend 迭代增加删 remove delete pop clear改 li[索引]="被修改的内容":切片"" 列表 ...
- Linux_源码安装包管理理论概述
一.源码包基本概述 1️⃣:源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言 2️⃣:Linux上的C语言编译器叫做gcc,利用 ...
- Linux进阶之排错
Permission denied 检查selinux长时间没有响应 防火墙 nginx和httpd可以自检nginx和httpd有日志 /var/log/nginx/ /var/log/httpd/ ...
- 【待写Java线程之线程终止 Interrupt 】
参考:https://bbs.csdn.net/topics/280082639 interrupt()方法不会中断一个正在运行的线程.这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线 ...
- 重新整理 .net core 实践篇—————服务与配置之间[十一二]
前言 前面基本介绍了,官方对于asp .net core 设计配置和设计服务的框架的一些思路.看下服务和配置之间是如何联系的吧. 正文 服务: public interface ISelfServic ...
- 书列荐书 |《黑天鹅·如何应对不可预知的未来》【美】纳西姆 尼古拉斯 塔勒布 著
你不知道的事比你知道的事更有意义,因为生活中发生了许多微小的事情,尽管出现的概率非常小,但是却以某一种巨大的力量影响我们的生活.但是由于思维习惯的问题,导致我们看问题的方式使得我们不能很快地把握事物的 ...
- 华为4D成像雷达、智能驾驶平台MDC 810
华为4D成像雷达.智能驾驶平台MDC 810 2020年10月底,华为发布了HI品牌,在今年2021年上海国际车展前夕,华为以 "专新致智" 为主题,举办HI新品发布会,发布了包括 ...
- Camera Calibration 相机标定
Camera Calibration 相机标定 一.相机标定方法 在opencv中提供了一组函数用于实现相机的标定,标定返回的值包括:相机内参矩阵(fx fy xc yc).相机外参矩阵(R t)以及 ...
- 深度树匹配模型(TDM)
深度树匹配模型(TDM) 算法介绍 Tree-based Deep Match(TDM)是由阿里妈妈精准定向广告算法团队自主研发,基于深度学习上的大规模(千万级+)推荐系统算法框架.在大规模推荐系统的 ...
- GPU编程和流式多处理器(四)
GPU编程和流式多处理器(四) 3.2. 单精度(32位) 单精度浮点支持是GPU计算的主力军.GPU已经过优化,可以在此数据类型上原生提供高性能,不仅适用于核心标准IEEE操作(例如加法和乘法),还 ...