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 ...
随机推荐
- hdu 5956 The Elder
http://acm.hdu.edu.cn/showproblem.php?pid=5956 转移方程:dp[i]=(dis[i]-dis[j])*(dis[i]-dis[j])+P+dp[j] 斜率 ...
- Kubernetes之解决从k8s.gcr.io拉取镜像失败问题
前言 因谷歌网络限制问题,国内的K8ser大多数在学习Kubernetes过程中因为镜像下载失败问题间接地产生些许失落感,笔者也因此脑壳疼,故翻阅资料得到以下解决方式: 在应用yaml文件创建资源时, ...
- MySql数据库表的查询操作
http://www.cnblogs.com/whgk/p/6149009.html 优化:http://www.ihref.com/read-16422.html MYSQL常用的几种连接查询方法
- 正则tips
在啃Sizzle源码,被几个正则表达式给难住了,写了一下正则demo,记录一下 1,按照定义[]和(?:)里的内容不计入捕获组的数目 2,捕获组的计数顺序是,从大到小,同级从左到右 例如 var re ...
- 20155202 2016-2017-2 《Java程序设计》第5周学习总结
20155202 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章:异常处理 java中所有错误会包装成对象,可以尝试(try)执行程序并捕捉(catc ...
- Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
转自http://blog.csdn.net/droidphone/article/details/7165482 1. ASoC的由来 ASoC--ALSA System on Chip ,是建立 ...
- 不能访问本地服务器场。没有注册带有FeatureDependencyId 的 Cmdlet
不能访问本地服务器场.没有注册带有FeatureDependencyId 的 Cmdlet. 原因: 我有两个域管理员账号,分别:sp\administrator,sp\spadmin 其中后者才 ...
- Java中包的介绍
包的介绍: 未命名包 命名包 可以避免类名重复 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2. ...
- 浙江省“一卡通”异地就医,C#调用省一卡通动态库
前言,最近学习调用 浙江省一卡通业务,主要就是调用一个DLL,动态库文件,这个动态库是浙大网新研发的. 借着自学的机会把心得体会都记录下来,方便感兴趣的小伙伴学习与讨论. 内容均系原创,欢迎大家转载分 ...
- 再议mysql 主从配置
1.创建用户: grant replication slave,replication client on *.* to repl@'192.168.1.%' IDENTIFIED By 'p4ssw ...