Two Triangles FZU - 2270

通過叉積判斷邊的相對位置,(類似極角排序),就可以判斷兩個三角形是否可以通過旋轉重合。

https://blog.csdn.net/w326159487/articl

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
# define ll long long
# define inf 0x3f3f3f3f

using namespace std;
struct code
{
    int x,y;
} point[15];
int dist(int x,int y)
{
    return (point[x].x-point[y].x)*(point[x].x-point[y].x)+(point[x].y-point[y].y)*(point[x].y-point[y].y);
}
int cj(int a,int b,int c)
{
    return (point[b].x-point[a].x)*(point[c].y-point[a].y)-(point[b].y-point[a].y)*(point[c].x-point[a].x);
}
int t,n,top;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        int ans=0;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
            scanf("%d%d",&point[i].x,&point[i].y);
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
            {
                if(j==i)
                    continue;
                for(int k=0; k<n; k++)
                {
                    if(k==i||k==j)
                        continue;
                    for(int p=0; p<n; p++)
                    {
                        if(p==i||p==j||p==k)
                            continue;
                        for(int q=0; q<n; q++)
                        {
                            if(q==i||q==j||q==k||q==p)
                                continue;
                            for(int r=0; r<n; r++)
                            {
                                if(r==i||r==j||r==k||r==p||r==q)
                                    continue;
                                int a1,b1,c1,a2,b2,c2;
                                int s=cj(i,j,k);
                                if(s==0)
                                    continue;
                                else if(s>0)
                                {
                                    a1=dist(i,k);
                                    b1=dist(k,j);
                                    c1=dist(j,i);
                                }
                                else
                                {
                                    a1=dist(i,j);
                                    b1=dist(j,k);
                                    c1=dist(k,i);
                                }
                                s=cj(p,q,r);
                                if(s==0)
                                    continue;
                                else if(s>0)
                                {
                                    a2=dist(p,r);
                                    b2=dist(r,q);
                                    c2=dist(q,p);
                                }
                                else
                                {
                                    a2=dist(p,q);
                                    b2=dist(q,r);
                                    c2=dist(r,p);
                                }
                                if(a1==a2&&b1==b2&&c1==c2)
                                    ans++;
                                else if(a1==b2&&b1==c2&&c1==a2)
                                    ans++;
                                else if(a1==c2&&b1==a2&&c1==b2)
                                    ans++;
                            }
                        }
                    }
                }
            }
        }
        printf("Case %d: %d\n",++top,ans/36);

    }
    return 0;
}

e/details/80283227

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章