HDU 5365(不是地球人)

题目给你一些点让你求构成正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;
}
/*
6
0 0
0 1
1 1
1 0
0 2
1 2


*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值