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
Case #1: 1
Case #2: 6
 
题意:在空间中的点里面找到有多少点可以组成满足下列条件的四面体:
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(三维几何)的更多相关文章

  1. HDU 5839 Special Tetrahedron

    HDU 5839 Special Tetrahedron 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n ...

  2. hdu 4617 Weapon【异面直线距离——基础三维几何】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4617 Weapon Time Limit: 3000/1000 MS (Java/Others)     ...

  3. HDU 4617 Weapon(三维几何)

    Problem Description Doctor D. are researching for a horrific weapon. The muzzle of the weapon is a c ...

  4. HDU 5839 Special Tetrahedron (2016CCPC网络赛08) (暴力+剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5839 在一个三维坐标,给你n个点,问你有多少个四面体(4个点,6条边) 且满足至少四边相等 其余两边不 ...

  5. HDU 5839 Special Tetrahedron 计算几何

    Special Tetrahedron 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...

  6. HDU 5839 Special Tetrahedron (计算几何)

    Special Tetrahedron 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...

  7. HDU 4087 三维上的平移缩放旋转矩阵变化

    题目大意: 就是根据它给的程序的要求,不断平移,缩放,旋转三维的点,最后计算出点的位置 这里主要是要列出三种转换方式的齐次矩阵描述 平移translate tx ty tz1 0 0 00 1 0 0 ...

  8. HDU 3584 三维树状数组

    三维树状数组模版.优化不动了. #include <set> #include <map> #include <stack> #include <cmath& ...

  9. hdu 1140(三维)

    War on Weather Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

随机推荐

  1. 框架----Django之Form提交验证(一)

    一.Form提交验证与Ajax提交验证的运用实例 Form表单提交时会刷新页面,输入失败时,输入框内内容也会随之刷新不能保留:而Ajax提交是在后台偷偷提交,不会刷新页面,因此也就可以保留页面输入框内 ...

  2. @RequestBody 和@ResponseBody 注解详解

    简介: @RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对 ...

  3. ajax 中操作this,需要先在ajax的外面给this重新定义为_this!!

    //设置为默认收货地址 $(document).on('tap','.right_none',function(){ var _this = $(this); //只有这样定义,在ajax的内部才可以 ...

  4. OpenCV---Canny边缘提取

    一:Canny算法介绍 Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: 好的检测- 算法能够尽可能多地标识出图像中的实际边缘. 好的定位- 标识出的边缘要尽可能与实际图像中的实 ...

  5. Shiro实战教程(二)

    http://www.jianshu.com/p/6786ddf54582/ https://www.cnblogs.com/ealenxie/p/10610741.html

  6. 【BZOJ】1778: [Usaco2010 Hol]Dotp 驱逐猪猡

    [题意]给定无向图,炸弹开始在1,在每个点爆炸概率Q=p/q,不爆炸则等概率往邻点走,求在每个点爆炸的概率.n<=300. [算法]概率+高斯消元 [题解]很直接的会考虑假设每个点爆炸的概率,无 ...

  7. a 标签传值

    转载:http://blog.csdn.net/muyeju/article/details/48594377 .<a>标签传值的形式--参数固定:<a href="地址? ...

  8. easyUI导出数据

    easyUI导出数据模式 后台: //导出数据 public function index_doExport() { $search['diqu']=$_POST['diqu']; $search[' ...

  9. CodeForces - 1004C

    Since Sonya is interested in robotics too, she decided to construct robots that will read and recogn ...

  10. 【leetcode 简单】第四十一题 Excel表列序号

    给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...