POJ2002 &&HDU5365 判断给定的点中有多少个不同的正方形
| Time Limit: 3500MS | Memory Limit: 65536K | |
| Total Submissions: 17740 | Accepted: 6776 |
Description
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
points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
Output
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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ2002 &&HDU5365 判断给定的点中有多少个不同的正方形的更多相关文章
- SDUT 2129 树结构练习——判断给定森林中有多少棵树
树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 众 ...
- javascript判断给定字符串是否是回文
//判断给定字符串是否是回文 function isPalindrome(word) { var s = new Stack(); for (var i = 0 ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内。以及两点间的测距功能
权声明:本文为博主原创文章,未经博主允许不得转载. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内.以及两点间的测距功能. 绘制多边形(蓝色) ...
- SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...
- Leetcode36--->Valid Sudoku(判断给定的数独是否有效)
题目:给定一个数独,某些部分已经被填上了数字,其余空的地方用‘.’表示:判断给定的数独是否有效: 数独规则: 每一行不能有重复的数字:每一列不能有重复的数字:将数独框划分为三行三列,没9个小方格不能有 ...
- SDUT-2140_判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...
- [CodeWars][JS]如何判断给定的数字是否整数
问题描述: We are asking for a function to take a positive integer value, and return a list of all positi ...
- 利用linq快速判断给定数字是否包含在某个段范围内
一.需求: 知道某段范围0x0020~0x007F0x00A0~0x017F0x01A0~0x01CF0x01F0~0x01FF0x0210~0x021F0x1EA0~0x1EFF给定一个值,快速判断 ...
随机推荐
- MyBatisPlus代码生成 mvc项目
package com.test; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus ...
- Day1-XDoj-1062
题目描述 一天,lw梦见自己在打dota,然而对面是一个加强过的卡尔!于是,他每次都被n个技能瞬间秒杀.愤怒的lw决定买BKB,来加强生存力. 由于加强过的卡尔是电脑操作的,他每次看见lw时,只会以1 ...
- DataReader和DataAdapter的区别
SqlDataReader是一个向前的指针,本身并不包含数据,调用一次Read()方法它就向前到下一条记录,一个SqlDataReader必须单独占用一个打开的数据库连接. 在使用 SqlDataRe ...
- 十九 Listener
Listener 监听器 一 监听器内部原理:其实就是接口回调 需求:A在执行循环,当循环到5的时候,通知B 事先先把某一个对象传递给A ,当A执行到5的时候,通过这个对象来调用B中的方法 但是不是直 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:显示和隐藏内容
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- firewalld学习--service
service是firewalld中另外一个非常重要的概念.还是拿门卫的例子来解释. 在iptables的时代我们给门卫下达规则时需要告诉他“所有到22号楼的人全部予以放行”.“所有到80号楼的人全部 ...
- 小程序通过web-view实现与h5页面之间的交互
在小程序端使用web-view内嵌网页,通过 src 携带参数,通过 @message 接收h5传回的数据 <template> <view> <web-view :sr ...
- vue :is 属性
为什么使用 :is ?DOM模板解析说明: 当使用DOM作为模板时(例如,将el选项挂载到一个已知的元素上),你会受到HTML的一些限制,因为Vue只有在浏览器解析和标准化HTML后才能获取模板内容. ...
- Java笔记: 初始化块
Java语言提供了很多类初始化的方法,包括构造器.初始化器等.除了这两种方法之外,我们还可以用初始化块(initialization block)来实现初始化功能. 基本语法 初始化块是出现在类声明中 ...
- python笔记10
今日内容 参数 作用域 函数嵌套 知识点回顾 函数基本结果 def func(name,age,email): # 函数体(保持缩进一致) a = 123 print(a) return 1111#函 ...