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:楼主脑残有点严 ...
随机推荐
- Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
在卸载或者重安装Infragistics NetAdvantage时候提示如标题的错误 win7下 1.打开注册表 Regedit 2.找到HKEY_LOCAL_MACHINE/SOFTWARE/Mi ...
- typedef
第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, ...
- bzoj3052: [wc2013]糖果公园
又是一代神题. uoj测速rank10,bzoj测速rank26(截止当前2016.5.30 12:58) 带修改的树上莫队. 修改很少,块的大小随便定都能A 然而我一开始把开3次根写成了pow(bl ...
- pyMysql
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- DevExpress.chartControt画趋势图
private void DrawLine(DataTable dt) { Myalysis.Series.Clear(); //图标位置 Myalysis.Legend.AlignmentHoriz ...
- 自己封装的常用NPOI文件导出源码
示例: 1. 2.示例2 源码下载地址:https://github.com/aa1356889/NPOICode
- 加密算法中BASE64、MD5、SHA、HMAC等之间的区别
http://blog.csdn.net/lplj717/article/details/51828692 根据项目需要了解了一下几种加密算法(参考其他博客),内容简要介绍BASE64.MD5.SHA ...
- SAM初探
SAM,即Suffix Automaton,后缀自动机. 关于字符串有很多玩法,有很多算法都是围绕字符串展开的.为什么?我的理解是:相较于数字组成的序列,字母组成的序列中每个单位上元素的个数是有限的. ...
- myql Connect
mysql折腾笔记 2014-01-05 10:58 经常吹嘘自己玩过各种数据库. redis, mysql, sqlite, mongodb..常用数据库都不在话下,不料今天却在远程连接mysql上 ...
- mysql5.7安装配置
sonar要求mysql5.6版本,所以安装一下最新的mysql5.7 相对路径配置一直存在问题,所以采用绝对路径配置,本次配置的基础路径是: D:\sonar\mysql-5.7.17-winx64 ...