Special Tetrahedron
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 328 Accepted Submission(s): 130
Problem Description
Given n points which are in three-dimensional space(without repetition).
Please
find out how many distinct Special Tetrahedron among them. A
tetrahedron is called Special Tetrahedron if it has two following
characters.
1. At least four edges have the same length.
2. If it has exactly four edges of the same length, the other two edges are not adjacent.
Input
Intput contains multiple test cases.
The first line is an integer T,1≤T≤20, the number of test cases.
Each case begins with an integer n(n≤200), indicating the number of the points.
The next n lines contains three integers xi,yi,zi, (−2000≤xi,yi,zi≤2000), representing the coordinates of the ith point.
Output
For
each test case,output a line which contains"Case #x: y",x represents
the xth test(starting from one),y is the number of Special Tetrahedron.
Sample Input
2
4
0 0 0
0 1 1
1 0 1
1 1 0
9
0 0 0
0 0 2
1 1 1
-1 -1 1
1 -1 1
-1 1 1
1 1 0
1 0 1
0 1 1
Sample Output
题意:在空间中的点里面找到有多少点可以组成满足下列条件的四面体:
1.至少有四条边相同.
2.在确保4条边相等的情况下,另外的两条边不相邻。
QAQ,昨天4道题止步于网络赛,奈何这个第五道三维几何没做过,被吓住了 TAT ..根本没有1003难嘛。。
题解:枚举对角线,找到所有和对角线两端点相等的点,然后去枚举所有的和对角线距离相等的点(还要判断四点不共面)。因为有两条对角线,所以答案会被算两次。然后是正四面体,我们每条线都被多算了1次,总共算了6次,我们只要其中的一次。所以最终答案为 (ans-same)/2+same/6 = ans/2- same/3...交代码请用G++。。
aaarticlea/png;base64,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" alt="" />
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#define sqr(x) ((x)*(x))
using namespace std;
const double eps = 1e-;
struct Point
{
double x,y,z;
Point(double x, double y, double z) : x(x), y(y), z(z) {}
Point() {}
Point operator - (const Point & p) const
{
return Point(x-p.x, y-p.y, z-p.z);
}
} p[];
struct Node
{
int idx;
double dis;
}node[];
int sig(double d)
{
return (d>eps) - (d<-eps);
}
//叉乘
Point cross(const Point & a, const Point & b)
{
return Point(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x);
}
Point cross(const Point & o, const Point & a, const Point & b)
{
return cross(a-o,b-o);
}
//点乘
double dot(const Point & a, const Point & b)
{
return a.x*b.x + a.y*b.y + a.z*b.z;
}
//判断四点共面
bool sameFace(const Point & a, const Point & b, const Point & c, const Point & d)
{
return sig(dot(b-a, cross(a, c, d))) == ;
}
//两点距离
double dis(const Point & a, const Point & b)
{
return sqrt(sqr(a.x-b.x) + sqr(a.y-b.y) + sqr(a.z-b.z));
}
int main()
{
int tcase,n,t=;
scanf("%d",&tcase);
while(tcase--)
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);
}
int ans = ,ans1=;
for(int i=; i<=n; i++)
{
for(int j=i+; j<=n; j++) ///枚举对角线
{
int cnt = ;
for(int k=; k<=n; k++)
{
if(sig(dis(p[i],p[k])-dis(p[j],p[k]))==)
{
node[++cnt].idx = k;
node[cnt].dis = dis(p[i],p[k]);
}
}
for(int k=; k<=cnt; k++)
{
for(int l=k+; l<=cnt; l++)
{
if(sig(node[k].dis-node[l].dis)!=) continue;
if(sameFace(p[i],p[j],p[node[k].idx],p[node[l].idx])) continue;
ans++;
if(sig(dis(p[node[k].idx],p[node[l].idx])-node[k].dis)==&&sig(dis(p[i],p[j])-node[k].dis)==)
{
ans1++;
}
}
}
}
}
printf("Case #%d: %d\n",t++,ans/-ans1/);
}
}
- HDU 5839 Special Tetrahedron
HDU 5839 Special Tetrahedron 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n ...
- hdu 4617 Weapon【异面直线距离——基础三维几何】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4617 Weapon Time Limit: 3000/1000 MS (Java/Others) ...
- HDU 4617 Weapon(三维几何)
Problem Description Doctor D. are researching for a horrific weapon. The muzzle of the weapon is a c ...
- HDU 5839 Special Tetrahedron (2016CCPC网络赛08) (暴力+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5839 在一个三维坐标,给你n个点,问你有多少个四面体(4个点,6条边) 且满足至少四边相等 其余两边不 ...
- HDU 5839 Special Tetrahedron 计算几何
Special Tetrahedron 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...
- HDU 5839 Special Tetrahedron (计算几何)
Special Tetrahedron 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...
- HDU 4087 三维上的平移缩放旋转矩阵变化
题目大意: 就是根据它给的程序的要求,不断平移,缩放,旋转三维的点,最后计算出点的位置 这里主要是要列出三种转换方式的齐次矩阵描述 平移translate tx ty tz1 0 0 00 1 0 0 ...
- HDU 3584 三维树状数组
三维树状数组模版.优化不动了. #include <set> #include <map> #include <stack> #include <cmath& ...
- hdu 1140(三维)
War on Weather Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
随机推荐
- HDU 4383 To The Moon 解题报告
HDU 4383 To The Moon 题意翻译 已知一个长为\(n\)的序列\(a\),你需要进行下面的四种操作. C l r d 将区间\([l,r]\)中的数加上\(d\),同时时间加\(1\ ...
- oAuth2.0理解
转自http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 理解OAuth 2.0 作者: 阮一峰 日期: 2014年5月12日 OAuth是一个关 ...
- python基础----列表生成式、生成器表达式
结论: 1.把列表解析的[]换成()得到的就是生成器表达式 2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存 3.Python不但使用迭代器协议,让for循环变得更加通用 ...
- 使用Hexo写博客
首先,你需要搭建一个Hexo博客网站- 使用Hexo搭建GitHub博客(2018年Mac版) 原生方式新建文章 Hexo的项目结构是在网站根目录的source/_posts目录下存放你的博客文档,以 ...
- UESTC--1727
原题链接:http://acm.uestc.edu.cn/problem.php?pid=1727 分析:用 l[i] 记录第 i 层楼有多少物品需要往上继续搬运,如果某层楼没有物品,但是更上面还有, ...
- 管理lnmp常用命令,lnmp重启,start|stop|reload|restart等命令
LNMP状态管理命令: LNMP状态管理: /root/lnmp {start|stop|reload|restart|kill|status}Nginx状态管理:/etc/init.d/nginx ...
- 「Python-Django」Django中使用数据库的 9 个小技巧
Django 中使用数据库的 9 个小技巧. 1. 过滤器聚合 在 Django 2.0 之前,如果你想得到“用户总数”.“活跃用户总数”等信息时,你不得不使用条件表达式. Django 2.0 中, ...
- 「HTML5」url、href、src区别
一.URL的概念 统一资源定位符(或称统一资源定位器/定位地址.URL地址等,英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址).如同在网络上的门 ...
- 深入分析Java中的 == 和equals
关于Java中的 == 和equals的解释请看这位博主的文章 :http://www.cnblogs.com/dolphin0520/p/3592500.html 以下是我对这篇文章的一些扩展. 对 ...
- 数据分析与展示---Numpy入门
概括: 一:数据维度 (一)一维数据 (二)二维数据 (三)多维数据 (四)高维数据 二:Numpy的数组对象:ndarray (一)Numpy介绍 (二)N维数组对象ndarray (三)ndarr ...