• POJ 2002 Squares (二分)


    Squares

    Time Limit : 7000/3500ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)

    Total Submission(s) : 12   Accepted Submission(s) : 11

    Problem Description
    A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, as a regular octagon also has this property.
    So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x and y coordinates.
     
    Input
    The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
     
    Output
    For each test case, print on a line the number of squares one can form from the given stars.
     
    Sample Input
    4
    1 0
    0 1
    1 1
    0 0
    9
    0 0
    1 0
    2 0
    0 2
    1 2
    2 2
    0 1
    1 1
    2 1
    4
    -2 5
    3 7
    0 0
    5 2
    0
     
    Sample Output
    1
    6
    1
     
    Source
    PKU
     
     
     
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    struct Point{
        int x,y;
        Point(){}
        Point(int a,int b):x(a),y(b){}
    }p[1010];
    
    int n;
    
    int cmp(Point a,Point b){
        if(a.x==b.x)
            return a.y<b.y;
        return a.x<b.x;
    }
    
    int BinSearch(Point tmp){
        int l=0,r=n,mid;
        while(l<=r){
            mid=(l+r)>>1;
            if(p[mid].x==tmp.x && p[mid].y==tmp.y)
                return 1;
            else if(cmp(p[mid],tmp))
                l=mid+1;
            else
                r=mid-1;
        }
        return 0;
    }
    
    int main(){
    
        //freopen("input.txt","r",stdin);
    
        while(~scanf("%d",&n) && n){
            for(int i=0;i<n;i++)
                scanf("%d%d",&p[i].x,&p[i].y);
            sort(p,p+n,cmp);
            int ans=0;
            int x3,y3,x4,y4;
            for(int i=0;i<n;i++)
                for(int j=i+1;j<n;j++){
                    x3=p[j].x-(p[j].y-p[i].y);      //给定正方形一条边的两点坐标求另外两点的坐标,自己画图算算
                    y3=p[j].y+(p[j].x-p[i].x);
                    if(!BinSearch(Point(x3,y3)))
                        continue;
                    x4=p[i].x-(p[j].y-p[i].y);
                    y4=p[i].y+(p[j].x-p[i].x);
                    if(!BinSearch(Point(x4,y4)))
                        continue;
                    ans++;
                    /*
                    printf("-------------\n");
                    printf("%d %d %d %d %d %d %d %d\n",p[i].x,p[i].y,p[j].x,p[j].y,x3,y3,x4,y4);
                    printf("-------------\n");
                    */
                }
            printf("%d\n",ans/2);
        }
        return 0;
    }
  • 相关阅读:
    使用flv.js + websokect播放rtsp格式视频流
    form表单数据回显双向绑定失效的原因
    element UI日期选择器动态切换了type之后布局错乱
    umi+dva+antd+axios搭建项目,跨域代理问题
    浏览器-preview 改写了 response里面的int类型的字段数值
    mac笔记本分辨率为2560*1600,css样式错位问题
    常用的正则表达式
    vue 实现树形结构
    js禁止遮罩层下页面滚动
    ts封装axios
  • 原文地址:https://www.cnblogs.com/jackge/p/2830821.html
Copyright © 2020-2023  润新知