【HDU 5839】Special Tetrahedron(计算几何)
空间的200个点,求出至少四边相等,且其余两边必须不相邻的四面体的个数。
用map记录距离点i为d的点有几个,这样来优化暴力的四重循环。
别人的做法是枚举两点的中垂面上的点,再把到中点距离相等的点找出来,n^3的样子。
还要注意四个点共面的情况。
共面判断就是用叉乘计算出ijk三点所在面的法向量,然后判断il向量是否和法向量垂直,是则共面。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#define eps (1e-6)
#define N 205
#define dd double
#define sqr(x) ((x)*(x))
using namespace std;
map<double,int>mm[N];
int ok[N];
struct node{
int x,y,z;
}a[N];
dd Dis[N][N];
dd dis(int i,int j)
{
if(Dis[i][j])return Dis[i][j];
return Dis[i][j]=sqrt(sqr(a[i].x-a[j].x)+sqr(a[i].y-a[j].y)+sqr(a[i].z-a[j].z));
}
node xmul(node i,node j,node k){
int z=(i.x-j.x)*(k.y-j.y)-(i.y-j.y)*(k.x-j.x);
int y=(i.z-j.z)*(k.x-j.x)-(i.x-j.x)*(k.z-j.z);
int x=(i.y-j.y)*(k.z-j.z)-(i.z-j.z)*(k.y-j.y);
return (node){x,y,z};
}
node xmul(int i,int j,int k){
return xmul(a[i],a[j],a[k]);
}
int sgn(dd a,dd b){
return fabs(a-b)>-eps&&fabs(a-b)<eps;
}
int te(int i,int j,int k,int l){//共面
node il=(node){a[i].x-a[l].x,a[i].y-a[l].y,a[i].z-a[l].z};
node s=xmul(i,j,k);
return s.x*il.x+s.y*il.y+s.z*il.z;
}
int main() {
int t,n;
scanf("%d",&t);
for(int cas=;cas<=t;cas++){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
int ans=,same=;
memset(ok,,sizeof ok);
memset(Dis,,sizeof Dis);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)mm[i].clear();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
mm[i][dis(i,j)]++;
if(mm[i][dis(i,j)]>){ok[i]=;break;}
}
for(int i=;i<=n;i++)if(ok[i])
for(int j=i+;j<=n;j++)if(ok[j])
for(int k=i+;k<=n;k++)if(ok[k]){
dd ij=dis(i,j),ik=dis(i,k),jk=dis(j,k);
if(sgn(jk,ik))
for(int l=k+;l<=n;l++)if(l!=j){
dd jl=dis(j,l),lk=dis(l,k),il=dis(i,l);
if(te(i,j,k,l)){
if(sgn(jk,jl)&&sgn(jl,il)&&sgn(il,jl))
{
ans++;
if(sgn(ij,lk)&&sgn(ij,ik))same++;
}
}
}
}
printf("Case #%d: %d\n",cas,ans-same/*);//全部边相同的会计算3次
}
}
赛后做出来的,为什么当时暴力都写不出来呢,因为在防止多算的时候给漏算了。枚举出错。
【HDU 5839】Special Tetrahedron(计算几何)的更多相关文章
- HDU 5839 Special Tetrahedron 计算几何
Special Tetrahedron 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...
- 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 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 ...
随机推荐
- java.io.IOException: 您的主机中的软件中止了一个已建立的连接解决办法
问题现象和http://hi.baidu.com/cara_cloud/item/193a3ee327546d395a2d64be描述的一样,就是在eclipse的console栏中一直显示java. ...
- JavaScript 全局属性/函数
JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...
- 为什么做前端要做好SEO
我就挑干货说啦SEO可能听起来很高大上,其实翻译成中文就是"搜索引擎优化",它只是通过一定的方法在网站内外发布文章.交换连接等,最终达到某个关键词在搜索引擎上获得好的排名. 我有幸 ...
- mysql下mysqladmin日常管理命令总结
mysqladmin 工具的使用格式:mysqladmin [option] command [command option] command ......参数选项:-c number 自动运行次数统 ...
- 重构Web Api程序(Api Controller和Entity) 续篇(1)
经过一系列重构,你眼明的话,还是可以看到还有重构的地方,如: string newFileName = "~/Temp/" + Guid.NewGuid().ToString() ...
- C#并行编程中的Parallel.Invoke
一.基础知识 并行编程:并行编程是指软件开发的代码,它能在同一时间执行多个计算任务,提高执行效率和性能一种编程方式,属于多线程编程范畴.所以我们在设计过程中一般会将很多任务划分成若干个互相独立子任务, ...
- .NET:Entity Framework 笔记
有二年没关注EF,今天无意试了下发现跟主流的Hibernate等ORM框架越来越接近了,先看下Entity类的定义: using System; using System.Collections.Ge ...
- 解决Kafka-1194问题
生产环境中使用Kafka作为日志处理的中间件,系统结构是这样的.自12月上线一个多月来,系统运行稳定. 用过kafka的都知道,Kafka产生的消息全部存储到硬盘文件中,并且在消息被消费后不会被立即删 ...
- 自定义圆形控件RoundImageView并认识一下attr.xml
今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...
- 基于FPGA的电压表与串口通信(上)
实验原理 该实验主要为利用TLC549采集模拟信号,然后将模拟信号的数字量通过串口发送到PC上上位机进行显示,使用到的TLC549驱动模块在进阶实验已经使用到了,串口模块在基础实验也已经使用到了,本实 ...