HDU 5839 Special Tetrahedron (2016CCPC网络赛08) (暴力+剪枝)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5839
在一个三维坐标,给你n个点,问你有多少个四面体(4个点,6条边) 且满足至少四边相等 其余两边不相邻。
暴力4重循环,但是在第3重循环的时候需要判断是否是等腰三角形,这便是一个剪枝。在第4重循环的时候判断4点是否共面 (叉乘), 5或者6边相等就+1,4边相等就判断另外两边是否相交就行了。
赛后过的,觉得自己还是太菜了。
//#pragma comment(linker, "/STACK:102400000, 102400000")8
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <ctime>
#include <list>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
typedef pair <int, int> P;
const int N = 2e2 + ;
int cost[N][N]; //两点的边长的平方
struct edge {
int x, y, z;
}a[N*N]; int main()
{
int t;
scanf("%d", &t);
for(int ca = ; ca <= t; ++ca) {
int n;
scanf("%d", &n);
for(int i = ; i <= n; ++i) {
scanf("%d %d %d", &a[i].x, &a[i].y, &a[i].z);
for(int j = ; j < i; ++j) {
cost[i][j] = cost[j][i] = (a[i].x - a[j].x)*(a[i].x - a[j].x) + (a[i].y - a[j].y)*(a[i].y - a[j].y) + (a[i].z - a[j].z)*(a[i].z - a[j].z);
}
}
edge s1, s2, s3;
int ans, res = , x1, x2, y1, y2, len1, len2; //x1 y1是一个三角面不同边的两端 len1为等腰三角形的腰
for(int i1 = ; i1 < n; ++i1) {
for(int i2 = i1 + ; i2 < n; ++i2) {
for(int i3 = i2 + ; i3 < n; ++i3) {
//判断3点是否形成等腰三角形
if(cost[i1][i2] != cost[i1][i3] && cost[i2][i3] != cost[i1][i2] && cost[i2][i3] != cost[i1][i3])
continue;
else if(cost[i1][i2] == cost[i1][i3] && cost[i1][i2] == cost[i2][i3]) {
len1 = cost[i1][i2], x1 = y1 = ;
}
else if(cost[i1][i2] == cost[i2][i3]) {
len1 = cost[i1][i2], x1 = i1, y1 = i3;
}
else if(cost[i1][i2] == cost[i1][i3]) {
len1 = cost[i1][i2], x1 = i2, y1 = i3;
}
else {
len1 = cost[i2][i3], x1 = i1, y1 = i2;
}
for(int i4 = i3 + ; i4 <= n; ++i4) {
if(cost[i1][i4] != cost[i2][i4] && cost[i1][i4] != cost[i3][i4] && cost[i3][i4] != cost[i2][i4])
continue;
else if(cost[i1][i4] == cost[i2][i4] && cost[i1][i4] == cost[i3][i4]) {
len2 = cost[i1][i4], x2 = y2 = ;
}
else if(cost[i1][i4] == cost[i2][i4]) {
len2 = cost[i1][i4], x2 = i3, y2 = i4;
}
else if(cost[i1][i4] == cost[i3][i4]) {
len2 = cost[i1][i4], x2 = i2, y2 = i4;
}
else {
len2 = cost[i2][i4], x2 = i1, y2 = i4;
}
s1.x=a[i2].x-a[i1].x;s1.y=a[i2].y-a[i1].y;s1.z=a[i2].z-a[i1].z;
s2.x=a[i3].x-a[i1].x;s2.y=a[i3].y-a[i1].y;s2.z=a[i3].z-a[i1].z;
s3.x=a[i4].x-a[i1].x;s3.y=a[i4].y-a[i1].y;s3.z=a[i4].z-a[i1].z;
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 == ) //4点是否共面
continue;
if(!x1 || !x2) { //6边或5边相等
if(len1 == len2)
res++;
}
else {
if(len1 == len2 && (x1 != x2 && x1 != y2 && y1 != x2 && y1 != y2)) //四边相等
res++;
}
}
}
}
}
printf("Case #%d: %d\n", ca, res);
}
return ;
}
HDU 5839 Special Tetrahedron (2016CCPC网络赛08) (暴力+剪枝)的更多相关文章
- 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 计算几何
Special Tetrahedron 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5839 Description Given n points ...
- hdu 4272 2012长春赛区网络赛 dfs暴力 ***
总是T,以为要剪枝,后来发现加个map就行了 #include<cstdio> #include<iostream> #include<algorithm> #in ...
- HDU 4764 Stone (2013长春网络赛,水博弈)
Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU 6212 Zuma 2017青岛网络赛 区间DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...
- hdu 4751 2013南京赛区网络赛 二分图判断 **
和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostre ...
- hdu 4273 2012长春赛区网络赛 三维凸包中心到最近面距离 ***
新模板 /* HDU 4273 Rescue 给一个三维凸包,求重心到表面的最短距离 模板题:三维凸包+多边形重心+点面距离 */ #include<stdio.h> #include&l ...
- hdu 4035 2011成都赛区网络赛E 概率dp ****
太吊了,反正我不会 /* HDU 4035 dp求期望的题. 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点 ...
随机推荐
- Sqlite数据库 找不到请求的 .Net Framework Data Provider。可能没有安装
解决方法 在web.config里面添加 <system.data> <DbProviderFactories> <remove invariant="Sy ...
- [Swift系列]002-基础语法
基础语法就那老几样,很快可以说完 [常量.变量] 1.变量用 var,系统自动去判断类型,但变量再次赋值需保持数据类型一致 var a=50 相信用过js/java/C#的,对这个var都不陌生 使 ...
- httpclient介绍
前言 超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了.Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需 ...
- Java中sychronized方法与sychronized块区别
一.举几个栗子
- cong
Directions: Study the following cartoon carefully and write an essay in which you should 1) descr ...
- Levenshtein Distance (编辑距离) 算法详解
编辑距离即从一个字符串变换到另一个字符串所需要的最少变化操作步骤(以字符为单位,如son到sun,s不用变,将o->s,n不用变,故操作步骤为1). 为了得到编辑距离,我们画一张二维表来理解,以 ...
- INDEX_JOIN
这里就以INDEX_JOIN为例,简单描述一下如何影响Oracle的执行计划的产生. 控制执行计划最简单的方法莫过于使用HINT,这篇文章要介绍的是,在不使用HINT的情况下,让Oracle产生IND ...
- Range类中的三个方法及简单打印
package pkgFirst; import org.junit.Test; public class Range{ /** * FunName: println * Description : ...
- HTTP协议的状态码
对于Web编程人员来说,熟悉了解HTTP协议的状态码是很有必要的,很多时侯可能根据HTTP协议的状态码很快就能定位到错误信息!今天整理了一下所有HTTP状态码. HTTP状态码(HTTP Status ...
- 编码的UI测试项目——Visual Studio 2013
今天实现了一次编码的UI测试项目,以下是我进行测试的过程: 1.新建测试项目 在visual studio中(我用的版本是2013 update2)点击文件->新建->项目,选择“编码的U ...