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:楼主脑残有点严 ...
随机推荐
- 递推 hdu 1330
http://www.cnblogs.com/rainydays/archive/2013/01/16/2862235.html 看样例的答案 #include<stdio.h> #inc ...
- 【USACO 3.2】Factorials(阶层非零尾数)
题意:输出n的阶层最后一个非0数. 题解:可以把5和2的个数算出来,每次把5和2都除掉,最后乘上比5多出来的2.我的解法是,每次把尾巴的0去掉,并且保留3位,算到最后取尾数就可以了.. /* TASK ...
- 使用视 meta 标签来控制手机浏览器布局
移动浏览器的Fennec一样呈现在一个虚拟的"窗口"页面(视),通常比屏幕宽.所以他们不需要去挤每个页面布局到一个小窗口(这会破坏许多非移动优化的网站) .用户可以平移和缩放才能看 ...
- bootstrap兼容性问题
转自--http://blog.csdn.net/chenhongwu666/article/details/41513901/ 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstr ...
- css-列表或标题的多级计数
利用css实现多级计数,比如1/1.1/1.1.1这种层层嵌套的计数,主要利用到counter-reset/counter-increment/counter/content/:before. 一.标 ...
- C# 扩展系统类方法
1.声明扩展方法的步骤:类必须是static,方法是static 2.第一个参数是被扩展的对象,前面标注this 3.使用扩展方法的时候必须保证扩展方法类已经在当前代码中using 例子:using ...
- px和em,rem的区别
1.px是你屏幕设备物理上能显示出的最小的一个点,这个点不是固定宽度的,不同设备上点的长宽.比例有可能会不同.假设:你现在用的显示器上1px宽=1毫米,但我用的显示器1px宽=两毫米,那么你定义一个d ...
- linux 7z 命令编译安装
7zip是一个开源的压缩软件 7z格式是压缩率最高的格式 服务器备份 数据几个g 要是tar压缩下载的话 时间太长 7zip压缩出来体积很小 首先安装 我这是 centos的 直接可以 yum ...
- POJ 1321 棋盘问题(dfs)
传送门 棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38297 Accepted: 18761 Descri ...
- 【基础】MVC路由规则
一.RouteData解析过程 在ASP.NET MVC中,服务器收到来自客户端的请求后,会经过一些列的处理拿到请求的数据,比如在Pipeline 管线事件中,通过订阅适当的事件,将HttpConte ...