• POJ2002 &&HDU5365 判断给定的点中有多少个不同的正方形


    Squares
    Time Limit: 3500MS   Memory Limit: 65536K
    Total Submissions: 17740   Accepted: 6776

    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

    题意就是给了很多点,然后要在这些点中找出正方形的数量。和HDU5365一样在于,整点是不可能构成正三角形,正五边形,正六边形的。所以题目要求的还是正四边形即正方形的个数。两道题目代码相同。

    将各个点按x y排好序,之后搜索点的时候二分。

    代码:

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <vector>
    #include <string>
    #include <cstring>
    #pragma warning(disable:4996)
    using namespace std;
    
    struct no {
    	int x;
    	int y;
    }node[1005];
    
    int num;
    
    bool cmp(const no& node1, const no& node2)
    {
    	if (node1.x == node2.x)
    	{
    		return node1.y < node2.y;
    	}
    	else
    	{
    		return node1.x < node2.x;
    	}
    }
    
    bool binsearch(int x, int y)
    {
    	int left = -1, right = num, mid;
    
    	while (right - left > 1)
    	{
    		mid = (left + right) / 2;
    		if (node[mid].x == x && node[mid].y == y)
    			return true;
    		else
    		{
    			if ((node[mid].x == x && node[mid].y < y) || (x > node[mid].x))
    			{
    				left = mid;
    			}
    			else
    			{
    				right = mid;
    			}
    		}
    	}
    	return false;
    }
    
    int main()
    {
    	int i, j, pos_x1, pos_y1, pos_x2, pos_y2, ans;
    	while (cin >> num)
    	{
    		if (num == 0)
    			break;
    		ans = 0;
    
    		/*if (num <= 3)
    		{
    			cout << 0 << endl;
    			continue;
    		}之前一直WA在这里!!!*/
    		for (i = 0; i < num; i++)
    		{
    			scanf("%d%d", &node[i].x, &node[i].y);
    		}
    		sort(node, node + num, cmp);
    
    		for (i = 0; i < num; i++)
    		{
    			for (j = i + 1; j < num; j++)
    			{
    				pos_x1 = node[i].x + (node[i].y - node[j].y);
    				pos_y1 = node[i].y - (node[i].x - node[j].x);
    
    				pos_x2 = node[j].x + (node[i].y - node[j].y);
    				pos_y2 = node[j].y - (node[i].x - node[j].x);
    
    				if ((binsearch(pos_x1, pos_y1)) && (binsearch(pos_x2, pos_y2)))
    					ans++;
    
    				pos_x1 = node[i].x - (node[i].y - node[j].y);
    				pos_y1 = node[i].y + (node[i].x - node[j].x);
    
    
    				pos_x2 = node[j].x - (node[i].y - node[j].y);
    				pos_y2 = node[j].y + (node[i].x - node[j].x);
    
    				if ((binsearch(pos_x1, pos_y1)) && (binsearch(pos_x2, pos_y2)))
    					ans++;
    			}
    		}
    		cout << ans / 4 << endl;
    	}
    	return 0;
    }


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    PHP数据库连接mysql与mysqli的区别与用法
    PHP自定义环境搭建(apache、php)
    2021-11-04 CCPC女生赛 ABCDGIK 题解
    Virtual Judge 20211026 日常训练 ABCDEFG题解
    Spring AOP:@DeclareParents 为对象添加方法
    Spring AOP:@Around 的 JavaConfig 写法
    Spring AOP:@Before、@After 的 JavaConfig 写法
    spring事务传播属性
    缓存与数据库的一致性问题怎么解决
    Java多线程之CyclicBarrier
  • 原文地址:https://www.cnblogs.com/lightspeedsmallson/p/4899588.html
Copyright © 2020-2023  润新知