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)的更多相关文章

  1. POJ 3668 Game of Lines (暴力,判重)

    题意:给定 n 个点,每个点都可以和另一个点相连,问你共有多少种不同斜率的直线. 析:那就直接暴力好了,反正数也不大,用set判重就好,注意斜率不存在的情况. 代码如下: #include <c ...

  2. 886A. ACM ICPC#均值分配问题(暴力)

    题目出处:http://codeforces.com/problemset/problem/886/A 题目大意:已知六个人得分,问是否能分成两个三人队使得每个队伍得分加和相等 #include< ...

  3. 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 ...

  4. HDU 6351暴力枚举 6354计算几何

    Beautiful Now Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  5. ACM/ICPC 之 枚举(POJ1681-画家问题+POJ1166-拨钟问题+POJ1054-讨厌的青蛙)

    POJ1681-画家问题 枚举的经典例题,枚举第一行即可,其余行唯一. //画家问题,y表示黄色,w表示白色,怎样让墙上所有方格为y,操作类似熄灯问题poj1222 //memory 136K Tim ...

  6. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)

    Generalized Palindromic Number Time Limit: 2 Seconds      Memory Limit: 65536 KB A number that will ...

  7. Codeforces 890A - ACM ICPC 暴力

    A. ACM ICPCtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputst ...

  8. hdu 4277 USACO ORZ (暴力+set容器判重)

    USACO ORZ Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)

     目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...

随机推荐

  1. 使用Hibernate的 isNotEmpty( ) 方法 报错: No result defined .... and result dataAccessFailure

    数据访问失败 出错代码: cardy.add(Restrictions.isNotEmpty("grade.cardtype.cardtype")); try...catch之后发 ...

  2. HTML之form表单和input系列

    <form method="POST" action="/host"> <input class="c1" type=&q ...

  3. 【原】mysql5.6 split函数_字符串的分割

    DROP FUNCTION IF EXISTS `getSplitName`$$ )) RETURNS text BEGIN /* 对逗号进行分离的字符串,分割出'登陆名_用户名/部门名'中的_后部门 ...

  4. 星型数据仓库olap工具kylin介绍

    星型数据仓库olap工具kylin介绍 数据仓库是目前企业级BI分析的重要平台,尤其在互联网公司,每天都会产生数以百G的日志,如何从这些日志中发现数据的规律很重要. 数据仓库是数据分析的重要工具, 每 ...

  5. Java中判断字符串是否为数字的五种方法

    //方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ ...

  6. xv6课本翻译之——附录A Pc的硬件

    Appendix A 附录A PC hardware Pc的硬件 This appendix describes personal computer (PC) hardware, the platfo ...

  7. jquery的.html(),.text()和.val()方法

    新人一段时间没写前端代码就有点忘记了,现在来复习一下..html()方法 获取集合中第一个匹配元素的HTML内容 或 设置每一个匹配元素的html内容,具体有3种用法: .html() 不传入值,就是 ...

  8. 北京培训记day2

    后缀三姐妹 P.S.后缀大家族关系:后缀自动机fail指针=后缀树,后缀树前序遍历=后缀数组 一.后缀数组:orz罗穗骞集训队论文 给每个后缀按字典序排序 rank[]表示从i开始的后缀排名多少 sa ...

  9. lightbox使用

    使用方法: 1.在页面头部包含 lightbox.js 文件并加载 lightbox.css 样式表文件 <script type="text/javascript" src ...

  10. Set集合

    Set:无序(存储和取出数据不一致):唯一性(不可重复) Set是Collection的子类,所以Collection的方法Set都可以使用 HashSet:底层为哈希表,保证唯一性,依赖hashCo ...