zoukankan      html  css  js  c++  java
  • hdu 5206 Four Inages Strategy

    题目大意:

    判断空间上4个点是否形成一个正方形

    分析:

    标称思想 : 在p2,p3,p4中枚举两个点作为p1的邻点,不妨设为pipj,然后判断p1pip1pj是否相等、互相垂直,然后由向量法,最后一个点坐标应该为pi+pjp1,判断是否相等就好了。

    我的思想 : 枚举了各种情况,4条边相等+有一个角是直角。后来想想,因为是在三维中,有可能4个点不共面,这点没想到,不过这道题AC了,估计数据水了

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<string>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<queue>
     8 #include<stack>
     9 #include<vector>
    10 #define eps 1e-9
    11 #define maxn
    12 using namespace std;
    13 typedef long long LL;
    14 struct Node
    15 {
    16     long long  x,y,z;
    17 };
    18 Node p[5];
    19 double dist(int a,int b)
    20 {
    21     double cha1=(double)p[a].x-p[b].x;
    22     double cha2=(double)p[a].y-p[b].y;
    23     double cha3=(double)p[a].z-p[b].z;
    24     return (sqrt(cha1*cha1+cha2*cha2+cha3*cha3));
    25 }
    26 int puan(int a,int b,int c)
    27 {
    28     LL x1=p[b].x-p[a].x;
    29     LL y1=p[b].y-p[a].y;
    30     LL z1=p[b].z-p[a].z;
    31 
    32     LL x2=p[b].x-p[c].x;
    33     LL y2=p[b].y-p[c].y;
    34     LL z2=p[b].z-p[c].z;
    35     if(x1*x2+y1*y2+z1*z2==0)
    36         return 1;
    37     return 0;
    38 
    39 }
    40 int solve()
    41 {
    42     double tem1,tem2,tem3,tem4;
    43     tem1=dist(1,2);
    44     tem2=dist(2,3);
    45     tem3=dist(3,4);
    46     tem4=dist(4,1);
    47     //printf("%lf %lf %lf %lf==
    ",tem1,tem2,tem3,tem4);
    48     if(fabs(tem1-tem2)<eps&&fabs(tem2-tem3)<eps&&fabs(tem3-tem4)<eps&&puan(1,2,3))
    49         return 1;
    50     tem1=dist(1,2);
    51     tem2=dist(2,4);
    52     tem3=dist(4,3);
    53     tem4=dist(3,1);
    54     if(fabs(tem1-tem2)<eps&&fabs(tem2-tem3)<eps&&fabs(tem3-tem4)<eps&&puan(1,2,4))
    55         return 1;
    56     tem1=dist(1,3);
    57     tem2=dist(3,2);
    58     tem3=dist(2,4);
    59     tem4=dist(4,1);
    60     if(fabs(tem1-tem2)<eps&&fabs(tem2-tem3)<eps&&fabs(tem3-tem4)<eps&&puan(1,3,2))
    61         return 1;
    62     tem1=dist(1,3);
    63     tem2=dist(3,4);
    64     tem3=dist(4,2);
    65     tem4=dist(2,1);
    66      // printf("%lf %lf %lf %lf==
    ",tem1,tem2,tem3,tem4);
    67     if(fabs(tem1-tem2)<eps&&fabs(tem2-tem3)<eps&&fabs(tem3-tem4)<eps&&puan(1,3,4))
    68         return 1;
    69     tem1=dist(1,4);
    70     tem2=dist(4,2);
    71     tem3=dist(2,3);
    72     tem4=dist(3,1);
    73     if(fabs(tem1-tem2)<eps&&fabs(tem2-tem3)<eps&&fabs(tem3-tem4)<eps&&puan(1,4,2))
    74         return 1;
    75     tem1=dist(1,4);
    76     tem2=dist(4,3);
    77     tem3=dist(3,2);
    78     tem4=dist(2,1);
    79     if(fabs(tem1-tem2)<eps&&fabs(tem2-tem3)<eps&&fabs(tem3-tem4)<eps&&puan(1,4,3))
    80         return 1;
    81     return 0;
    82 }
    83 int main()
    84 {
    85     int t;
    86     scanf("%d",&t);
    87     for(int ii=1; ii<=t; ii++)
    88     {
    89         for(int i=1; i<=4; i++)
    90             scanf("%I64d %I64d %I64d",&p[i].x,&p[i].y,&p[i].z);
    91         printf("Case #%d: ",ii);
    92         if(solve())
    93             printf("Yes
    ");
    94         else
    95             printf("No
    ");
    96 
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    快速编辑里指定默认值
    Odoo domain 中的 like, ilike, =like, =ilike 举例说明【转】
    odoo报表条码无法显示解决[转]
    ubuntu 安装 wkhtmltopdf 的方法
    解决Odoo日期(时间)无效的问题 [转]
    ShareSDK演示
    黑客帝国数字矩阵特效做法
    lua中实现倒计时
    Lua中用Split函数分割字符串
    lua封装的位运算
  • 原文地址:https://www.cnblogs.com/tsw123/p/4438172.html
Copyright © 2011-2022 走看看