• hdu 6055 Regular polygon


    题意:给出n个点的坐标(均为整数),求能够组成的正多边形的个数

    题目思路:都是整数点,那么组成的正多边形只能为正方形,每次枚举两个点,判断是否存在另外的两个点能够组成正方形。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<set>
    #include<string>
    #include<algorithm>
    #define MAXSIZE 1005
    
    using namespace std;
    
    struct node
    {
        int x,y;
    }p[MAXSIZE];
    
    int vis[MAXSIZE][MAXSIZE];
    
    int solve(int p1,int p2)
    {
        int x = p[p1].x - p[p2].x;
        int y = p[p1].y - p[p2].y;
        int ans=0;
        if(p[p1].x-y>=0 && p[p1].y+x>=0 && p[p2].x-y>=0 && p[p2].y+x>=0 && vis[p[p1].x-y][p[p1].y+x] && vis[p[p2].x-y][p[p2].y+x])
            ans++;
        if(p[p1].x+y>=0 && p[p1].y-x>=0 && p[p2].x+y>=0 && p[p2].y-x>=0 && vis[p[p1].x+y][p[p1].y-x] && vis[p[p2].x+y][p[p2].y-x])
            ans++;
        return ans;
    }
    
    int main()
    {
        int n,x,y;
        while(scanf("%d",&n)!=EOF)
        {
            int ans = 0;
            memset(vis,0,sizeof(vis));
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&x,&y);
                vis[x+200][y+200] = 1;
                p[i].x = x+200;
                p[i].y = y+200;
            }
    
            for(int i=0;i<n;i++)
            {
                for(int j=i+1;j<n;j++)
                {
                    ans += solve(i,j);
                }
            }
    
            ans /= 4;
    
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    写个三个月后的我
    设置gridcontrol的焦点行
    希望我能更快的成长
    女人最想要的是什么
    初始化时查看combox的文本内容
    获取一个gridcontrol的数据行数
    第八章:Applet基础学习
    浅谈研发项目经理的技能要求
    学习C和C++应该看的书
    双缓冲绘图
  • 原文地址:https://www.cnblogs.com/alan-W/p/7247661.html
Copyright © 2020-2023  润新知