zoukankan      html  css  js  c++  java
  • HDU 5839 Special Tetrahedron

    暴力水过,数据水。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0);
    void File()
    {
        freopen("D:\in.txt","r",stdin);
        freopen("D:\out.txt","w",stdout);
    }
    template <class T>
    inline void read(T &x)
    {
        char c = getchar(); x = 0;while(!isdigit(c)) c = getchar();
        while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar();  }
    }
    
    const int maxn=300;
    struct point
    {
        int x,y,z;
    }p[maxn];
    int T,n,len[10];
    
    bool isonLine(int i,int j,int k)
    {
        int ax=p[j].x-p[i].x, ay=p[j].y-p[i].y, az=p[j].z-p[i].z;
        int bx=p[k].x-p[i].x, by=p[k].y-p[i].y, bz=p[k].z-p[i].z;
        int tx=(ay*bz-az*by), ty=(az*bx-ax*bz), tz=(ax*by-ay*bx);
        int ans=tx*tx+ty*ty+tz*tz;
        if(ans==0)return true;
        return false;
    }
    int dis(int i,int j)
    {
        int x=p[j].x-p[i].x, y=p[j].y-p[i].y, z=p[j].z-p[i].z;
        return x*x+y*y+z*z;
    }
    bool isonFace(int i,int j,int k,int l)
    {
         point s1,s2,s3;
         s1.x=p[j].x-p[i].x;s1.y=p[j].y-p[i].y;s1.z=p[j].z-p[i].z;
         s2.x=p[k].x-p[i].x;s2.y=p[k].y-p[i].y;s2.z=p[k].z-p[i].z;
         s3.x=p[l].x-p[i].x;s3.y=p[l].y-p[i].y;s3.z=p[l].z-p[i].z;
         int ans=s1.x*s2.y*s3.z+s1.y*s2.z*s3.x+s1.z*s2.x*s3.y-s1.z*s2.y*s3.x-s1.x*s2.z*s3.y-s1.y*s2.x*s3.z;
         if(ans == 0) return true;
         return false;
    }
    
    int main()
    {
        scanf("%d",&T); int cas=1;
        while(T--)
        {
            scanf("%d",&n);
    
            for(int i=1;i<=n;i++) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
    
            int ans=0;
            for(int i=1;i<=n;i++)
            {
                for(int j=i+1;j<=n;j++)
                {
                    for(int k=j+1;k<=n;k++)
                    {
                        if(isonLine(i,j,k)) continue;
    
                        len[1]=dis(i,j); len[2]=dis(i,k); len[3]=dis(j,k);
    
                        int f;
                        if(len[1]==len[2]&&len[1]==len[3]) f=len[1];
                        else if(len[1]==len[2]) f=len[1];
                        else if(len[1]==len[3]) f=len[1];
                        else if(len[2]==len[3]) f=len[2];
                        else continue;
    
                        for(int s=k+1;s<=n;s++)
                        {
                            if(isonFace(i,j,k,s)) continue;
    
                            len[4]=dis(i,s); len[5]=dis(j,s); len[6]=dis(k,s);
                            int sum=0; for(int d=1;d<=6;d++) if(len[d]==f) sum++;
                            if(sum<4) continue;
                            else if(sum>=5) ans++;
                            else
                            {
                                int id1,id2,flag=0;
                                for(int d=1;d<=6;d++)
                                {
                                    if(len[d]==f) continue;
                                    if(flag==0) id1=d,flag=1; else id2=d;
                                }
                                if( (id1==1&&id2==6) || (id1==2&&id2==5) || (id1==3&&id2==4) ) ans++;
                            }
    
                        }
    
                    }
                }
            }
            printf("Case #%d: %d
    ",cas++,ans);
        }
        return 0;
    }
  • 相关阅读:
    一年足迹记录
    Scanf连续调用多次并且存在%c的问题
    Oracle学习计划
    SQL语句、PL/SQL语句、SQL*PLUS语句结束符号
    使用sys无法通过sqlplus或者sqldeveloper连接数据库
    把十进制转化为二进制的一种方法
    GTK+与QT的对比
    数据库崩溃后对redo log的使用
    产生不重复的随机牌
    失效试图,还有就是 还原试图。
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5782067.html
Copyright © 2011-2022 走看看