zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MySQL8.0设置远程访问权限
    MySQL创建用户与授权
    input lable水平对齐
    jquery datagrid加载后仅选定第一行
    jquery隐藏按钮
    C# 添加excel批注
    在ashx中使用Server对象
    jquery 获取datagrid行数
    弹出窗体中加载页面
    【MySQL】MySQL零碎积累
  • 原文地址:https://www.cnblogs.com/alan-W/p/7247661.html
Copyright © 2011-2022 走看看