HDU 5839 Special Tetrahedron 计算几何
Special Tetrahedron
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=5839
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.
At least four edges have the same length.
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
Hint
题意
给你三维一些点,问你有多少个四边形满足以下条件
1.至少四个边相同
2.如果四个边相同,那么不相同的两个边不在一起。
题解:
n4暴力,但实际上复杂度达不到n4【和出题人是否懒惰有关,233
暴力枚举两个点,然后再枚举离这两点距离相同的点。
再枚举四个点,找到这个四边形四边相同,但是不共面的四个点。
再判断这个是不是正四边形,如果是正四边形的话,你会重复计算6次
否则重复计算两次。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 205;
struct point
{
int x,y,z;
point(){}
point(int x_,int y_,int z_):x(x_),y(y_),z(z_) {}
}p[210];
long long sq(long long a){
return a*a;
}
long long dis(point a,point b){
return sq(a.x-b.x)+sq(a.y-b.y)+sq(a.z-b.z);
}
bool check(point a,point b,point c,point d)
{
point s1,s2,s3;
s1.x=b.x-a.x;s1.y=b.y-a.y;s1.z=b.z-a.z;
s2.x=c.x-a.x;s2.y=c.y-a.y;s2.z=c.z-a.z;
s3.x=d.x-a.x;s3.y=d.y-a.y;s3.z=d.z-a.z;
long long ans=s1.x*s2.y*s3.z+s1.y*s2.z*s3.x+s1.z*s2.x*s3.y-s1.z*s2.y*s3.x-s1.x*s2.z*s3.y-s1.y*s2.x*s3.z;
if(ans==0)return true;
return false;
}
int Q[300],cas;
void solve(){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
}
long long ans1=0,ans2=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int cnt=0;
for(int k=1;k<=n;k++)
{
if(k==i||k==j)continue;
if(dis(p[i],p[k])==dis(p[j],p[k]))
Q[cnt++]=k;
}
if(cnt<=1)continue;
for(int i1=0;i1<cnt;i1++)
{
for(int j1=i1+1;j1<cnt;j1++)
{
int id1=Q[i1],id2=Q[j1];
if(dis(p[id1],p[i])!=dis(p[id2],p[i]))continue;
if(check(p[i],p[j],p[id1],p[id2]))continue;
if(dis(p[i],p[j])==dis(p[id1],p[i])&&dis(p[i],p[j])==dis(p[id1],p[id2]))ans2++;
else ans1++;
}
}
}
}
printf("Case #%d: %d\n",++cas,ans1/2+ans2/6);
}
int main(){
int t;
scanf("%d",&t);
while(t--)solve();
return 0;
}
HDU 5839 Special Tetrahedron 计算几何的更多相关文章
- HDU 5839 Special Tetrahedron
HDU 5839 Special Tetrahedron 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n ...
- HDU 5839 Special Tetrahedron (计算几何)
Special Tetrahedron 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...
- HDU 5839 Special Tetrahedron (2016CCPC网络赛08) (暴力+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5839 在一个三维坐标,给你n个点,问你有多少个四面体(4个点,6条边) 且满足至少四边相等 其余两边不 ...
- HDU 5130 Signal Interference(计算几何 + 模板)
HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...
- (四面体)CCPC网络赛 HDU5839 Special Tetrahedron
CCPC网络赛 HDU5839 Special Tetrahedron 题意:n个点,选四个出来组成四面体,要符合四面体至少四条边相等,若四条边相等则剩下两条边不相邻,求个数 思路:枚举四面体上一条线 ...
- hdu 5839(三维几何)
Special Tetrahedron Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- 【HDU 5839】Special Tetrahedron(计算几何)
空间的200个点,求出至少四边相等,且其余两边必须不相邻的四面体的个数. 用map记录距离点i为d的点有几个,这样来优化暴力的四重循环. 别人的做法是枚举两点的中垂面上的点,再把到中点距离相等的点找出 ...
- HDU 5979 Convex【计算几何】 (2016ACM/ICPC亚洲区大连站)
Convex Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- dedecms织梦列表页调用TAG标签并带上链接的实现方法
在需要调用的地方添加如下代码: [field:id runphp='yes'] global $cfg_cmspath; $tags = GetTags(@me); $revalue = ''; $t ...
- Django之初始庐山真面目
Django可以说是基于Python语言的一款非常成熟的框架,其功能之强大,应用之广泛,开发之便捷,可以说每一个细节都值得一赞 最重要的是,Django其实是我们学习Python过程中非常重要的部分之 ...
- 电容充放电时间常数RC计算方法
进入正题前,我们先来回顾下电容的充放电时间计算公式,假设有电源Vu通过电阻R给电容C充电,V0为电容上的初始电压值,Vu为电容充满电后的电压值,Vt为任意时刻t时电容上的电压值,那么便可以得到如下的计 ...
- Linux入侵问题排查
1.深入分析,查找入侵原因 1.1 检查隐藏账户及弱口令 1.1.1.检查服务器系统及应用账户是否存在弱口令 检查说明:检查管理员账户.数据库账户.MySQL账户.tomcat账户.网站后台管理员账户 ...
- MYSQL问题解决
1. MySQL错误日志里出现: 140331 10:08:18 [ERROR] Error reading master configuration 140331 10:08:18 [ERROR] ...
- linux,mac安装sentry
linux,mac安装sentry 最近需要一个日志监视系统所以选择了sentry.以下是用mac安装,看需求量linux安装类似后面的文章会补充. 安装docker https://download ...
- Visual Studio 2013更新内容简介
前言 VS2013终于发布了,虽然之前自己使用VS2010和VS2012的时间也不长,尤其是VS2012这自己刚刚也没用多久,看到VS2013发布了,自己忍不住也下载了下来,官网肯定可以下载,不过自己 ...
- (mysql)触发器、事件、事务、函数
1.事务操作原理:事务开启之后Start transaction,所有的操作都会临时保存到事务日志.只有在得到commit才会关闭,否则清空:2.设置回滚点: savepoint 回滚点名字: 回到 ...
- java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 问题解决
错误方式 @Test public void testDeserializeTest() throws IOException, ClassNotFoundException { ByteArrayO ...
- 解决tomcat 启动 一闪而过
有的朋友在启动Tomcat的时候会出现问题. 1例如: 手动点击startup.bat 后 ,一闪而过 2例如:在cmd下 进到tomcat的bin目录 运行 startup.bat ,然后输出 了J ...