HDU 5365(不是地球人)

来源:互联网 发布:网络连接器主要 编辑:程序博客网 时间:2024/05/02 01:36

题目给你一些点让你求构成正3、4、5、6边形的有多少。

题解:构成正3、5、6边形的不可以是整点。

所以题目转换为4点判断是不是正方形。

4边相等在加上一个直角就可以了。

#include<stdio.h>#include<string.h>struct node{    int x,y;}a[22];int dis(node a1,node a2){    return (a1.x-a2.x)*(a1.x-a2.x)+(a1.y-a2.y)*(a1.y-a2.y);}int fabs(int x){    return x<0?-x:x;}int panduan2(node a1,node a2,node a3,node a4){    node n1,n2;    n1.x=a1.x-a3.x;    n1.y=a1.y-a3.y;    n2.x=a1.x-a2.x;    n2.y=a1.y-a2.y;    if(n1.x*n2.x+n1.y*n2.y==0)return 1;    return 0;}int panduan(node a1,node a2,node a3,node a4){    int d1,d2,d3,d4;    d1=fabs(dis(a1,a2));    d2=fabs(dis(a1,a3));    d3=fabs(dis(a2,a4));    d4=fabs(dis(a3,a4));    if(d1==0)return 0;    if(d1==d2&&d1==d3&&d1==d4&&panduan2(a1,a2,a3,a4))return 1;    return 0;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        for(int i=0;i<n;i++)            scanf("%d%d",&a[i].x,&a[i].y);        long long sum=0;        for(int i=0;i<n;i++)        {            for(int j=0;j<n;j++)            {                for(int k=0;k<n;k++)                {                    for(int k2=0;k2<n;k2++)                    {                        if(i==j||i==k||i==k2||j==k||j==k2||k==k2)continue;                        if(panduan(a[i],a[j],a[k],a[k2]))                            sum++;                    }                }            }        }        printf("%lld\n",sum/8);    }    return 0;}/*60 00 11 11 00 21 2*/


0 0