Ampzz 2011 Cross Spider 计算几何

原题链接:http://codeforces.com/gym/100523/attachments/download/2798/20142015-ct-s02e07-codeforces-trainings-season-2-episode-7-en.pdf

题意

给你一堆三维点,问你他们是否共面

题解

模板题,套版就好,需要注意的是共线

代码

#include<iostream>
#include<cmath>
#include<cstdio>
#define MAX_N 100005
using namespace std;

const double eps=1e-10;

inline double Sqrt(double a) {
    return a <= 0 ? 0 : sqrt(a);
}

inline double Sqr(double a) {
    return a * a;
}

class Point_3 {
public:
    double x, y, z;

    Point_3() { }

    Point_3(double xx, double yy, double zz) : x(xx), y(yy), z(zz) { }

    Point_3 operator-(Point_3 a) {
        return Point_3(x - a.x, y - a.y, z - a.z);
    }

    double Length() const {
        return Sqrt(Sqr(x) + Sqr(y) + Sqr(z));
    }
};

Point_3 Det(const Point_3 &a,const Point_3 &b) {
    return Point_3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);
}

double Dot(const Point_3 &a,const Point_3 &b) {
    return a.x * b.x + a.y * b.y + a.z * b.z;
}

double vlen(Point_3 P){return P.Length();}

int dot_inline(Point_3 p1,Point_3 p2,Point_3 p3) {
    return vlen(Det(p1 - p2, p2 - p3)) < eps;
}

bool zero(double x) {
    return fabs(x) < eps;
}

Point_3 pvec(Point_3 s1,Point_3 s2,Point_3 s3) {
    return Det((s1 - s2), (s2 - s3));
}

int dots_onplane(Point_3 a,Point_3 b,Point_3 c,Point_3 d) {
    return zero(Dot(pvec(a, b, c), d - a));
}

int n;
Point_3 point3[MAX_N];

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        point3[i] = Point_3(a, b, c);
    }
    if (n <= 3) {
        cout << "TAK" << endl;
        return 0;
    }
    int p = -1;
    for (int i = 2; i < n; i++) {
        if (dot_inline(point3[0], point3[1], point3[i]) == 0) {
            p = i;
            break;
        }
    }
    if (p == -1) {
        cout << "TAK" << endl;
        return 0;
    }
    for (int i = 2; i < n; i++) {
        if (i == p)continue;
        if (dots_onplane(point3[0], point3[1], point3[p], point3[i]) == 0) {
            cout << "NIE" << endl;
            return 0;
        }
    }
    cout << "TAK" << endl;
    return 0;
}
时间: 2024-10-09 23:27:45

Ampzz 2011 Cross Spider 计算几何的相关文章

BZOJ 2338 HNOI 2011 数矩形 计算几何

题目大意:给出平面上的一些点,求这些点中组成的矩形的最大面积. 思路:任意找四个点然后判断肯定是不行的,那么我们不妨来想一想矩形的性质.比如,对角线的交点是两条对角线的中点,对角线相等.这样的话只要找到一对线段,使得他们的中点相同,并且长度相同,那么这两个对角线一定能够组成一个矩形.只有就可以利用叉积求出面积了. 比较坑的一点是,这个题万万不能用double,因为有一个点专门卡double.可以尝试用long double,最好还是避免精度问题,统一用整数. CODE: #include <cs

arm-linux工具

arm-linux工具的功能如下: arm-linux-addr2line 把程序地址转换为文件名和行号.在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号. arm-linux-ar 建立.修改.提取归档文件.归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容. arm-linux-c++flit 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突. arm-linux-gprof 显示程序调用段

UVA 11178 Morley&#39;s Theorem 计算几何

计算几何: 最基本的计算几何,差积  旋转 Morley's Theorem Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem D Morley's Theorem Input: Standard Input Output: Standard Output Morley's theorem states that that the line

[BZOJ 1027][JSOI2007]合金(计算几何+Floyd最小环)

Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的铁铝锡比重为用户所需要的比重. 现在,用户给出了n种他们需要的合金,以及每种合金中铁铝锡的比重.公司希望能够订购最少种类的原材料,并且使用这些原材料可以加工出用户需要的所有种类的合金. Solution 今天考试T3的70分算法似乎是这道原题(然而我没做过QwQ) 思路值得学习一下(

计算几何-凸包算法 Python实现与Matlab动画演示

凸包算法是计算几何中的最经典问题之一了.给定一个点集,计算其凸包.凸包是什么就不罗嗦了 本文给出了<计算几何——算法与应用>中一书所列凸包算法的Python实现和Matlab实现,并给出了一个Matlab动画演示程序. 啊,实现谁都会实现啦╮(╯▽╰)╭,但是演示就不一定那么好做了. 算法CONVEXHULL(P)  输入:平面点集P  输出:由CH(P)的所有顶点沿顺时针方向组成的一个列表 1.   根据x-坐标,对所有点进行排序,得到序列p1, …, pn 2.   在Lupper中加入p

UVA12304 2D Geometry 110 in 1! 计算几何

计算几何: 堆几何模版就可以了.... Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in binary) 2D geometry problems. CircumscribedCircle x1 y1 x2 y2 x3 y3 Find out the circumscribed circle of triangle (x1,y1)-(x2,y2)-(x3,y3). These three poi

(转载)Cross product

原文地址:https://en.wikipedia.org/wiki/Cross_product Cross product From Wikipedia, the free encyclopedia This article is about the cross product of two vectors in three-dimensional Euclidean space. For other uses, see Cross product (disambiguation). In m

hdu 1616 计算几何 凸包

题意是一个世界有许多个国家,每个国家有N个建筑,包括一个发电站和N-1个用电建筑,所有建筑围成的凸包就是这个国家的面积.一枚导弹如果在一个国家之内爆炸则可以使这个国家停电. step 1:求出每个国家的凸包(我用水平排序就是各种坑,改叉乘排序才过,主要是后面求面积的时候需要这个叉乘排序的信息). step 2:判断每枚导弹是否在这个国家的范围之内. step 3:求出所有停电的国家的面积. 就是计算几何的综合模拟水题,坑点就是要小心(QAQ||写计算几何的题目都是要小心). 传送门:http:/

USACO6.5-Closed Fences:计算几何

Closed Fences A closed fence in the plane is a set of non-crossing, connected line segments with N corners (3 < N < 200). The corners or vertices are each distinct and are listed in counter-clockwise order in an array {xi, yi}, i in (1..N). Every pa