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 ...
随机推荐
- 小Q与内存
Portal --> broken qwq Description (这个描述好像怎么都精简不起来啊qwq) 大概是说你的计算机有1GB的物理内存,按照Byte寻址,其物理地址空间为\(0\si ...
- python基础----常用模块
一 time模块(时间模块)★★★★ 时间表现形式 在Python中,通常有这三种方式来表示时 ...
- Linux之静态库与动态库20160706
所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源..so文件是共享库文件(动态 ...
- R-FCN:基于区域的全卷积网络来检测物体
http://blog.csdn.net/shadow_guo/article/details/51767036 原文标题为“R-FCN: Object Detection via Region-ba ...
- Android开发-eclipse+phonegap(Cordova)环境搭建
搭建步骤: 一.安装java [官网下载].eclipse+ADT+Android SDK [点我下载x86(android-22)] | [adt-bundle-windows-x86_64-201 ...
- 洛谷P1445 [Violet] 樱花 (数学)
洛谷P1445 [Violet] 樱花 题目背景 我很愤怒 题目描述 求方程 1/X+1/Y=1/(N!) 的正整数解的组数,其中N≤10^6. 解的组数,应模1e9+7. 输入输出格式 输入格式: ...
- expect 批量增加用户及配置密码
start.sh #!/bin/bash password="111111" username="test" if [ $# == 1 ] then usern ...
- NOIP模拟赛16
NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day2 期望得分:100+100+ =200+ 实际得分:100+40+70=210 T1天天寄快递 直接模拟,代码丢了...... T2天天和不 ...
- CF540 C BFS 水
'.'->'X' 前者走后变成后者,后者除了是终点不能再走.初始位置是X很傻的以为这样从初始点走出去后初始位置就变成不能走了,实际上是还能走一次的. 其他就是BFS,路上记得把路变成X就好了 太 ...
- selenium.common.exceptions.ElementNotVisibleException: Message: element not visible处理方法:selenium针对下拉菜单事件的处理
使用Selenium爬虫时,可能会遇到一些下拉菜单,动态加载,如果直接使用find_element_by_函数会报错,显示selenium.common.exceptions.ElementNotVi ...