zoukankan      html  css  js  c++  java
  • ccpc-1008-HDU5839Special Tetrahedron-计算几何

    计算几何水题。暴力搞

    注意力全部都在02那里,完全没想这道题!

      1 /*--------------------------------------------------------------------------------------*/
      2 
      3 #include <algorithm>
      4 #include <iostream>
      5 #include <cstring>
      6 #include <ctype.h>
      7 #include <cstdlib>
      8 #include <cstdio>
      9 #include <vector>
     10 #include <string>
     11 #include <queue>
     12 #include <stack>
     13 #include <cmath>
     14 #include <set>
     15 #include <unordered_set>
     16 #include <map>
     17 
     18 //debug function for a N*M array
     19 #define debug_map(N,M,G) printf("
    ");for(int i=0;i<(N);i++)
     20 {for(int j=0;j<(M);j++){
     21 printf("%d",G[i][j]);}printf("
    ");}
     22 //debug function for int,float,double,etc.
     23 #define debug_var(X) cout<<#X"="<<X<<endl;
     24 #define LL long long
     25 const int INF = 0x3f3f3f3f;
     26 const LL LLINF = 0x3f3f3f3f3f3f3f3f;
     27 const int prime = 2333;
     28 const int MOD = 1e9+7;
     29 
     30 /*--------------------------------------------------------------------------------------*/
     31 using namespace std;
     32 
     33 const int maxn = 210;
     34 int N,M,T;
     35 
     36 struct point{
     37     int x,y,z;
     38     point(int _x=0,int _y=0,int _z=0):x(_x),y(_y),z(_z){}
     39 
     40     bool operator < (const point &rhs) const
     41     {
     42         if(y == rhs.y && x == rhs.x) return z < rhs.z;
     43         else if(x == rhs.x) return y < rhs.y;
     44         else return x < rhs.x;
     45     }
     46     point operator + (const point B) const
     47     {
     48         return point(x+B.x,y+B.y,z+B.z);
     49     }
     50     point operator - (const point B) const
     51     {
     52         return point(x-B.x,y-B.y,z-B.z);
     53     }
     54     int operator * (const point B) const
     55     {
     56         return x*B.x + y*B.y + z*B.z;
     57     }
     58     point operator ^ (const point B) const
     59     {
     60         return point(y*B.z - z*B.y,
     61                      z*B.x - x*B.z,
     62                      x*B.y - y*B.x);
     63     }
     64 }pt[maxn];
     65 typedef point vec;
     66 
     67 struct node{
     68     int id;
     69     int dis;
     70     bool operator < (const node &rhs) const
     71     {
     72         return dis < rhs.dis;
     73     }
     74 };
     75 
     76 int dis(point a,point b)
     77 {
     78     return (a.x - b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) + (a.z-b.z)*(a.z-b.z);
     79 }
     80 bool onPlane(point a,point b,point c,point d)
     81 {
     82     return ( ((a-c) ^ (a-d)) * (a-b) ) == 0 ;
     83 }
     84 int _onPlane(point a,point b,point c,point d)
     85 {
     86     return ( ((a-c) ^ (a-d)) * (a-b) ) ;
     87 }
     88 
     89 vector <node> ppt[maxn];
     90 unordered_set <int > st;
     91 
     92 int myHash(LL a,LL b,LL c,LL d)
     93 {
     94     return ((((a*prime%MOD + b)*prime%MOD +c)*prime%MOD +d) + MOD )%MOD;
     95 }
     96 
     97 int cas;
     98 int main()
     99 {
    100     //freopen("input","r",stdin);
    101     scanf("%d",&T);
    102     while(T--)
    103     {
    104         scanf("%d",&N);
    105         for(int i=0,x,y,z;i<N;i++)
    106         {
    107             scanf("%d%d%d",&x,&y,&z);
    108             pt[i].x = x;
    109             pt[i].y = y;
    110             pt[i].z = z;
    111         }
    112 
    113         st.clear();
    114         for(int i=0;i<N;i++)
    115         {
    116             node tmp;
    117             ppt[i].clear();
    118             for(int j=0;j < N;j++) if(i != j)
    119             {
    120                 tmp.dis = dis(pt[i],pt[j]);
    121                 tmp.id = j;
    122                 ppt[i].push_back(tmp);
    123             }
    124             sort(ppt[i].begin(),ppt[i].end());
    125         }
    126 
    127         int ans = 0;
    128         int save[10];
    129         for(int i=0;i<N;i++)
    130         {
    131             for(int j=i+1;j<N;j++)
    132             {
    133                 //printf("now use:%d %d
    ",i,j);
    134                 for(int k=0;k<ppt[i].size();k++) if(ppt[i][k].id != j)
    135                 {
    136                     for(int h=k+1;h<ppt[i].size() && ppt[i][k].dis == ppt[i][h].dis;h++) if(ppt[i][h].id != j)
    137                     {
    138                         if(dis(pt[j],pt[ppt[i][h].id]) == dis(pt[j],pt[ppt[i][k].id]) && dis(pt[j],pt[ppt[i][h].id]) == ppt[i][k].dis)
    139                         {
    140                             if(onPlane(pt[i],pt[j],pt[ppt[i][k].id],pt[ppt[i][h].id]) ) continue;
    141                             //int s = myhash(i,j,ppt[i][k].id,ppt[i][h].id);
    142                             //printf("%d %d %d %d
    ",i,j,ppt[i][k].id,ppt[i][h].id);
    143                             vector <int> ve;
    144                             ve.push_back(i);
    145                             ve.push_back(j);
    146                             ve.push_back(ppt[i][k].id);
    147                             ve.push_back(ppt[i][h].id);
    148                             sort(ve.begin(),ve.end());
    149                             int s = myHash(ve[0],ve[1],ve[2],ve[3]);
    150                             if(st.find(s) == st.end())
    151                             {
    152                                 st.insert(s);
    153                                 //printf("%d %d %d %d
    ",i,j,ppt[i][k].id,ppt[i][h].id);
    154                                 //printf("%d
    ",_onPlane(pt[i],pt[j],pt[ppt[i][k].id],pt[ppt[i][h].id]));
    155                                 ans++;
    156                             }
    157 
    158                         }
    159                     }
    160                 }
    161             }
    162         }
    163 
    164         printf("Case #%d: %d
    ",++cas,ans);
    165     }
    166 }
  • 相关阅读:
    POJ 2186 Popular Cows
    POJ 1364 King
    poj1811
    poj1404
    poj1781
    poj1386
    poj1442
    C#中调用IE打开某文档
    【观点】什么时候学习编程都不晚
    遍历DataTable内存数据的三种方法性能对比
  • 原文地址:https://www.cnblogs.com/helica/p/5771511.html
Copyright © 2011-2022 走看看