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

题意

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

题解

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

代码

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. #define MAX_N 100005
  5. using namespace std;
  6.  
  7. const double eps=1e-;
  8.  
  9. inline double Sqrt(double a) {
  10. return a <= ? : sqrt(a);
  11. }
  12.  
  13. inline double Sqr(double a) {
  14. return a * a;
  15. }
  16.  
  17. class Point_3 {
  18. public:
  19. double x, y, z;
  20.  
  21. Point_3() { }
  22.  
  23. Point_3(double xx, double yy, double zz) : x(xx), y(yy), z(zz) { }
  24.  
  25. Point_3 operator-(Point_3 a) {
  26. return Point_3(x - a.x, y - a.y, z - a.z);
  27. }
  28.  
  29. double Length() const {
  30. return Sqrt(Sqr(x) + Sqr(y) + Sqr(z));
  31. }
  32. };
  33.  
  34. Point_3 Det(const Point_3 &a,const Point_3 &b) {
  35. 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);
  36. }
  37.  
  38. double Dot(const Point_3 &a,const Point_3 &b) {
  39. return a.x * b.x + a.y * b.y + a.z * b.z;
  40. }
  41.  
  42. double vlen(Point_3 P){return P.Length();}
  43.  
  44. int dot_inline(Point_3 p1,Point_3 p2,Point_3 p3) {
  45. return vlen(Det(p1 - p2, p2 - p3)) < eps;
  46. }
  47.  
  48. bool zero(double x) {
  49. return fabs(x) < eps;
  50. }
  51.  
  52. Point_3 pvec(Point_3 s1,Point_3 s2,Point_3 s3) {
  53. return Det((s1 - s2), (s2 - s3));
  54. }
  55.  
  56. int dots_onplane(Point_3 a,Point_3 b,Point_3 c,Point_3 d) {
  57. return zero(Dot(pvec(a, b, c), d - a));
  58. }
  59.  
  60. int n;
  61. Point_3 point3[MAX_N];
  62.  
  63. int main() {
  64. scanf("%d", &n);
  65. for (int i = ; i < n; i++) {
  66. int a, b, c;
  67. scanf("%d%d%d", &a, &b, &c);
  68. point3[i] = Point_3(a, b, c);
  69. }
  70. if (n <= ) {
  71. cout << "TAK" << endl;
  72. return ;
  73. }
  74. int p = -;
  75. for (int i = ; i < n; i++) {
  76. if (dot_inline(point3[], point3[], point3[i]) == ) {
  77. p = i;
  78. break;
  79. }
  80. }
  81. if (p == -) {
  82. cout << "TAK" << endl;
  83. return ;
  84. }
  85. for (int i = ; i < n; i++) {
  86. if (i == p)continue;
  87. if (dots_onplane(point3[], point3[], point3[p], point3[i]) == ) {
  88. cout << "NIE" << endl;
  89. return ;
  90. }
  91. }
  92. cout << "TAK" << endl;
  93. return ;
  94. }

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

  1. Codeforces Gym 100523K K - Cross Spider 计算几何,判断是否n点共面

    K - Cross SpiderTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/v ...

  2. bzoj 2395: [Balkan 2011]Timeismoney【计算几何+最小生成树】

    妙啊,是一个逼近(?)的做法 把两个值最为平面上的点坐标,然后答案也是一个点. 首先求出可能是答案的点xy分别是按照c和t排序做最小生成树的答案,然后考虑比这两个点的答案小的答案,一定在xy连线靠近原 ...

  3. X Open Cup named after E.V. Pankratiev. European Grand Prix

    A. Arithmetic Rectangle 对于一行或者一列的情况可以递推求出最大值. 对于至少一行或者一列的情况,可以定义四个格子一组横向和纵向的相等关系,然后悬线法求最大子矩阵. 时间复杂度$ ...

  4. arm-linux工具

    arm-linux工具的功能如下: arm-linux-addr2line 把程序地址转换为文件名和行号.在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上 ...

  5. Linux平台Makefile文件的编写基础篇

    目的:        基本掌握了 make 的用法,能在Linux系统上编程. 环境:        Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境. 准备: ...

  6. 退役III次后做题记录(扯淡)

    退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...

  7. bzoj2395 [Balkan 2011]Timeismoney(最小乘积生成树+计算几何)

    题意 每条边有两个权值\(c,t\),请求出一颗生成树,使得\(\sum c\times \sum t\)最小 题解 为什么生成树会和计算几何扯上关系-- 对于每棵树,设\(x=c,y=t\),我们可 ...

  8. ACM/ICPC 之 计算几何入门-叉积-to left test(POJ2318-POJ2398)

    POJ2318 本题需要运用to left test不断判断点处于哪个分区,并统计分区的点个数(保证点不在边界和界外),用来做叉积入门题很合适 //计算几何-叉积入门题 //Time:157Ms Me ...

  9. ACM 计算几何中的精度问题(转)

    http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...

随机推荐

  1. python面试题之什么是lambda函数?

    lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用l ...

  2. shell-code-拷贝文件

    #!/bin/bash while read F do cp ${F}"_pe_1.fastq.gz" /public/home/chenjy/usr/ZD/data/cleand ...

  3. python3与python2的编码问题

    在讲这个问题之前,我们先说说unicode的工作原理.unicode包含了跟全球所有国家编码的映射关系,就是不管你用哪个国家的编码,unicode都能找到它在unicode中的编码.那么无论你用什么编 ...

  4. stm32L0系列学习(二)HAL-LL库等比较

  5. Python中re(正则表达式)模块使用方法

    Python中常用的正则表达式处理函数: re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import re text = "JGood ...

  6. day03_12 缩进介绍

    python比较变态,必须缩进,而C可以不缩进,世界上只有python这门语言要求必须缩进 tab键是缩进,shift+tab往左移动 SyntaxError:invalid syntax 语法错误 ...

  7. 如何用字体在网页中画icon

    一.用css雪碧图 1.简介 CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许将一个页面涉及到的所有零星图片都包含到一张大图中, 利用CSS的“background- ...

  8. python随机数的产生

    导入 random模块  >>> import random 1.  random.random random.random()用于生成一个0到1的随机浮点数: 0 <= n ...

  9. POJ 1953 World Cup Noise

    World Cup Noise Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14397   Accepted: 7129 ...

  10. BZOJ2298 [HAOI2011]problem a 【dp】

    题目 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) 输入格式 第一行一个整数n,接下来n行每行两个 ...