hdu5365 暴力枚举所有点是否能够成正四边形

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <iomanip>

using namespace std;
#define MAXN 10005
#define MOD 1000000007

struct node
{
    int x , y;
}arr[25];

int solve(int i , int j , int k , int l)
{
    double a , b ,c ,d , e ,f;
    a = sqrt((arr[i].x - arr[j].x)*(arr[i].x - arr[j].x)+abs(arr[i].y - arr[j].y)*abs(arr[i].y - arr[j].y));
    b = sqrt((arr[j].x - arr[k].x)*(arr[j].x - arr[k].x)+abs(arr[j].y - arr[k].y)*abs(arr[j].y - arr[k].y));
    c = sqrt((arr[k].x - arr[l].x)*(arr[k].x - arr[l].x)+abs(arr[k].y - arr[l].y)*abs(arr[k].y - arr[l].y));
    d = sqrt((arr[i].x - arr[l].x)*(arr[i].x - arr[l].x)+abs(arr[i].y - arr[l].y)*abs(arr[i].y - arr[l].y));
    e = sqrt((arr[i].x - arr[k].x)*(arr[i].x - arr[k].x)+abs(arr[i].y - arr[k].y)*abs(arr[i].y - arr[k].y));
    f = sqrt((arr[l].x - arr[j].x)*(arr[l].x - arr[j].x)+abs(arr[l].y - arr[j].y)*abs(arr[l].y - arr[j].y));
    double minn , maxx;
    int num1 = 0 , num2 = 0;
    minn = min(a , min(b , c));
    maxx = max(a , max(b ,max(c , max(d , max(e , f)))));
    if(a == minn) num1 ++ ;
    if(a == maxx) num2 ++;
    if(b == minn) num1 ++ ;
    if(b == maxx) num2 ++;
    if(c == minn) num1 ++ ;
    if(c == maxx) num2 ++;
    if(d == minn) num1 ++ ;
    if(d == maxx) num2 ++;
    if(e == minn) num1 ++ ;
    if(e == maxx) num2 ++;
    if(f == minn) num1 ++ ;
    if(f == maxx) num2 ++;
    if(num1 == 4 && num2 == 2 ) return 1;
    else return 0;
}

int main()
{
    int n;
    while(cin >> n)
    {
        for(int i = 0 ; i < n ; i ++)
        {
            scanf("%d %d" , &arr[i].x , &arr[i].y);
        }
        int num = 0;
        for(int i = 0 ; i < n ; i ++)
        {
            for(int j = i + 1 ; j < n ; j ++)
            {
                for(int k = j + 1 ; k < n ; k ++)
                {
                    for(int l = k + 1 ; l < n ; l ++)
                    {
                        if(solve(i , j , k , l)) num ++ ;
                    }
                }
            }
        }
        cout << num << endl;
    }
}

你可能感兴趣的:(hdu5365 暴力枚举所有点是否能够成正四边形)