【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 ...
随机推荐
- android 下载文件
import com.example.android.R; import android.app.Activity;import android.os.Bundle;import android.os ...
- HTTP 错误 500.22 - Internal Server Error
HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 最可能的原因: 此应用程序在 system.web/http ...
- h1/title,b/strong,i/em 的区别
< strong > 表示html页面上的强调(emphasized text), < em > 表示句子中的强调(即强调语义) 1.b和strong的区别 盲人朋友使用阅读设 ...
- 在linux下运行java工程
在linux 服务器上运行JAVA工程需注意.1: 在linux 上: /etc/profile 设置classpath 配置正确的jar 路径.2: 把本地JAVA工程做成一个jar包.如:1. ...
- NOI2018准备Day19
5天没写. 伸展树 主席树 3到线段树模板题
- Collections和Arrays常用方法
Collections:常见方法: 1, 对list进行二分查找: 前提该集合一定要有序. int binarySearch(list,key); //必须根据元素自然顺序对列表进行升级排序 //要求 ...
- python中from module import * 的一个陷阱
from module import *把module中的成员全部导到了当前的global namespace,访问起来就比较方便了.当然,python style一般不建议这么做,因为可能引起nam ...
- byte[] 转字符串 中文乱码
闲来无事,写了一个UWP的UDP/TCP小Demo,网上找了个网络调试助手,就兴冲冲的开始玩耍 结果“鸡同鸭讲”: 讲英文的时候大家都是abc,hello man!how are you? 讲中文的时 ...
- flex弹性布局学习笔记
前言 资料来源于网络,本人只是对此作了一下操作,记录于此以便以后查阅.目的在于梳理自己前端凌乱的知识点. 本文根据 Brian Franco 的一个flexbox.scss库来记录 入职新公司前对移动 ...
- Windows7 x64配置 Apache2 + PHP5 + MySQL5
1:相关软件下载: Apache HTTP Server 版本:(httpd-2.2.25-win32-x86-openssl-0.9.8y) PHP ...