ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)
CCPC网赛第八题,求立体几何数量,题解见注释
//立体几何-求满足要求的四面体个数
//要求1:至少4条边相等
//要求2:四条边相等时,另两条边一定不相邻(即对边)
//题解:以当前边为不相邻的其中一条边,对可以构成等腰三角形的第三点进行枚举
//再对这些第三点的集合做一次n^2的枚举,分两种情况找出四面体
//如果四条边或五条边相同,则只存在两种重复情况(当前边和对边互换)
//如果六条边相同,则存在六种重复情况(每个边作一次当前边)
//Time:499Ms Memory:1576K
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; #define MAXP 205
#define POW(x) ((x)*(x)) struct Point{
int x, y, z;
Point() {}
Point(int xx, int yy, int zz):x(xx), y(yy), z(zz){}
}p[MAXP]; struct Node {
int d, u;
Node(){}
Node(int dd, int uu):d(dd), u(uu){}
}nd[MAXP]; int n;
int len; int Distance(Point a, Point b)
{
return POW(a.x - b.x) + POW(a.y - b.y) + POW(a.z - b.z);
} Point xmult(Point a, Point b) //叉积
{
return Point(a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x);
}
//向量差a-b(b到a)
Point subt(Point a, Point b)
{
return Point(a.x - b.x, a.y - b.y, a.z - b.z);
} int dmult(Point a, Point b) //点积
{
return a.x*b.x + a.y*b.y + a.z*b.z;
} //取平面法向量
Point normalv(Point a, Point b, Point c)
{
return xmult(subt(a, b), subt(b, c));
} bool onplane(Point a, Point b, Point c, Point d) //四点共面
{
return dmult(normalv(a, b, c), subt(d, a)) == 0;
} int main()
{
//freopen("t.in", "r", stdin);
int T;
int cas = 1;
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d%d%d", &p[i].x, &p[i].y, &p[i].z);
int sum1 = 0, sum2 = 0; //sum1:六条边不全相等,sum2:六条边都相等
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
len = 0;
for (int k = 0; k < n; k++) //枚举到ij线段上距离相等的第三点k
{
if (k == i || k == j) continue;
int tmp = Distance(p[i], p[k]);
if (tmp == Distance(p[j], p[k]))
nd[len++] = Node(tmp, k);
} for (int k1 = 0; k1 < len; k1++)
{
for (int k2 = k1 + 1; k2 < len; k2++)
{
if (nd[k1].d != nd[k2].d) continue;
if (onplane(p[i], p[j], p[nd[k1].u], p[nd[k2].u])) continue;
int tmp = Distance(p[nd[k1].u], p[nd[k2].u]);
if (tmp == Distance(p[i], p[j]) && tmp == nd[k1].d)
sum2++; //六条边相等
else sum1++;
}
} }
}
printf("Case #%d: %d\n", cas++, sum1/2+sum2/6);
} return 0;
}
ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)的更多相关文章
- POJ 3668 Game of Lines (暴力,判重)
题意:给定 n 个点,每个点都可以和另一个点相连,问你共有多少种不同斜率的直线. 析:那就直接暴力好了,反正数也不大,用set判重就好,注意斜率不存在的情况. 代码如下: #include <c ...
- 886A. ACM ICPC#均值分配问题(暴力)
题目出处:http://codeforces.com/problemset/problem/886/A 题目大意:已知六个人得分,问是否能分成两个三人队使得每个队伍得分加和相等 #include< ...
- Codeforces Round #445 A. ACM ICPC【暴力】
A. ACM ICPC time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- HDU 6351暴力枚举 6354计算几何
Beautiful Now Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...
- ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)
POJ1681-画家问题 枚举的经典例题,枚举第一行即可,其余行唯一. //画家问题,y表示黄色,w表示白色,怎样让墙上所有方格为y,操作类似熄灯问题poj1222 //memory 136K Tim ...
- [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
Generalized Palindromic Number Time Limit: 2 Seconds Memory Limit: 65536 KB A number that will ...
- Codeforces 890A - ACM ICPC 暴力
A. ACM ICPCtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputst ...
- hdu 4277 USACO ORZ (暴力+set容器判重)
USACO ORZ Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
随机推荐
- Zabbix2.4.7源码安装手册
一.安装Apache Server 注:使用root安装后,变更拥有者为your-user 1 安装环境 系统: CentOS release 6.6 软件: httpd-2.2.31 2 安装步骤 ...
- Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
在卸载或者重安装Infragistics NetAdvantage时候提示如标题的错误 win7下 1.打开注册表 Regedit 2.找到HKEY_LOCAL_MACHINE/SOFTWARE/Mi ...
- thinkphp-二次开发1
Thinkphp是一个国人使用的比较多的一个框架 ,具体的也不多了,不知道的可以去百度一下. 现在我们要讲的是如何利用现有的半成品的系统实现二次开发 讲到thinkphp的二次开发不得不说他的兄弟on ...
- 配置generatorConfig.xml自动生成的代码的sql书写问题
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...
- jquery-三级联动
html <!DOCTYPE html> <html> <head> <meta charset=gbk /> <title>selectL ...
- Beta版本冲刺第一天
Aruba 408 409 410 428 429 431 完成任务: 瀑布流方块长按删除提示 实现获取剪贴板内容并保存到数据库 常驻通知栏模块界面实现,设置按钮并预留intent 立会照片: 燃尽图 ...
- html5+css+div随时笔记
首先给头部文件引用格式 <link href="<%=basePath%>temp/public/css/style.css" rel="stylesh ...
- UVA232
这只是大概的雏形. 步骤就是:1输入网格,2给网格里的起始格编序号,3输出所有字母,前面要加序号 #include<stdio.h> #include<ctype.h> #in ...
- Node.js 安装配置
1.安装常用工具: [root@em-nodejs /]# yum -y install vim wget xz 2.下载Node.js二进制安装包: [root@em-nodejs /]# wget ...
- System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本问题
出错的原因: 1.虽然报的是需要安装客户端8.1.7及以上版本,实际是由于.NET账户没有访问Oracle\bin文件夹的权限 2.在 Windows Server 2003/2008 或Window ...