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. oracle 时间

    select to_char(to_date(sysdate,'yyyy-mm-dd'),'day') from dual; select to_date('2017-12-31','day') fr ...

  2. Hdu2433 Travel

    Travel Time Limit: 10000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  3. Uoj308【UNR #2】UOJ拯救计划

    分析:比较难分析的一道题,先把式子写出来,ans=∑C(k,i)*f(i),f(i)是选i个颜色的方案数.这个模数有点奇怪,比较小而且是合数,说不定就会有某种规律,如果i >= 3,可以发现C( ...

  4. 我的emacs简易配置

    ;;------------语言环境字符集设置(utf-8)------------- (set-language-environment 'Chinese-GB) (set-keyboard-cod ...

  5. Qt ------ 判断运行在何种系统下

    #ifdef Q_OS_WIN // Windows上的代码 #endif #ifdef Q_OS_LINUX // Linux上的代码 #endif #ifdef Q_OS_MAC // Mac上的 ...

  6. I/O多路复用一些概念

    一.前言 在事件驱动模型中,我们说当程序遇到I/O操作时,注册 一个回调到事件循环中,主程序继续做其他事情.当I/O操作完成后,再切换回原来的任务.这就是说I/O操作是和程序本身没关系的,其实I/O操 ...

  7. 还不会做! 树上的gcd 树分治 UOJ33

    题目链接:http://uoj.ac/problem/33 题解链接:http://vfleaking.blog.uoj.ac/blog/38 现在感觉到了做OI的层层递进的思路的伟大之处,作为一个大 ...

  8. 字符串:SAM

    HDU4622:区间查询不同子串个数 用后缀自动机预处理出所有区间的不同子串个数 建立n次后缀自动机 #include <stdio.h> #include <string.h> ...

  9. Linux_创建母版,快速克隆,如何移动虚拟机.ziw

    2017年1月9日, 星期一 Linux_创建母版,快速克隆,如何移动虚拟机       1. 安裝虚拟机       2. 建立母版——第一次启动虚拟机    2.1 设置网卡为NAT模式   2. ...

  10. input美化问题

    对于前端来说,一个比较大的问题是,当HTML提供的最原始的控件长的很丑可是又没有相应的属性去更改,碰到这个问题时我们应该怎么办?比如radio的那个单选框我觉得好丑啊,怎么办呢?一个很好的思路就是把它 ...