Squares(枚举+set 查找)
http://poj.org/problem?id=2002
题意:给出n组坐标,判断这些坐标能组成的正方形的个数。
思路:参考某大神的想法,先枚举两个点,然后利用公式表示出另外两个点,判断这两个点是否在这n组坐标中,其中查找另两个坐标用的set容器。
已知 (x1,y1)(x2,y2);
则:x3 = x1+(y1-y2); y3 = y1 -(x1-x2);
x4 = x2 +(y1-y2);y4 = y2 -(x1-x2);
或:x3 = x1 -(y1-y2);y3 = y1+(x1-x2);
x4 = x2 -(y1-y2);y4 = y2 +(x1-x2);
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <set>
const int N=;
const int maxn=; using namespace std;
struct node
{
long long x;
long long y;
} p[maxn];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
int ans = ;
set<long long>tt;
for (int i = ; i < n; i ++)
{
scanf("%lld %lld",&p[i].x,&p[i].y);
tt.insert(p[i].x*N+p[i].y);//将坐标转化成一个数,坐标不同,则这个数就不同
}
for (int i = ; i < n; i ++)
{
int x1 = p[i].x;
int y1 = p[i].y;
for (int j = i+; j < n; j ++)
{
int x2 = p[j].x;
int y2 = p[j].y;
int x3 = x1+(y1-y2);
int y3 = y1-(x1-x2);
int x4 = x2+(y1-y2);
int y4 = y2-(x1-x2);
if (tt.count(x3*N+y3) && (tt.count(x4*N+y4)))// 查找坐标是否存在
++ans;
x3 = x1-(y1-y2);
y3 = y1+(x1-x2);
x4 = x2-(y1-y2);
y4 = y2+(x1-x2);
if (tt.count(x3*N+y3) && (tt.count(x4*N+y4)))
++ans;
}
}
printf("%d\n",ans/);
}
return ;
}
Squares(枚举+set 查找)的更多相关文章
- CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
1514: Packs Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 61 Solved: 4[Submit][Status][Web Board] ...
- poj3977(折半枚举+二分查找)
题目链接:https://vjudge.net/problem/POJ-3977 题意:给一个大小<=35的集合,找一个非空子集合,使得子集合元素和的绝对值最小,如果有多个这样的集合,找元素个数 ...
- Subset POJ - 3977(折半枚举+二分查找)
题目描述 Given a list of N integers with absolute values no larger than 10 15, find a non empty subset o ...
- Subset---poj3977(折半枚举+二分查找)
题目链接:http://poj.org/problem?id=3977 给你n个数,找到一个子集,使得这个子集的和的绝对值是最小的,如果有多种情况,输出子集个数最少的: n<=35,|a[i]| ...
- POJ2002 Squares(枚举)
题目链接. 分析: 普遍的做法是:先枚举两个点,通过数学公式得到另外2个点,使得这四个点能够成正方形.然后检查散点集中是否存在计算出来的那两个点,若存在,说明有一个正方形. 但这种做法会使同一个正方形 ...
- HDU 4430 & ZOJ 3665 Yukari's Birthday(二分法+枚举)
主题链接: HDU:pid=4430" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4430 ...
- 4 Values whose Sum is 0(枚举+二分)
The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute ...
- Android 千牛数据库分析
标签(空格分隔): 千牛,逆向 问题:Android 千牛登陆后产生保存用户数据的db无法直接用sqlite3打开,需要解密. 反编译Apk后jd-gui查看源码.熟悉的sqlcrypto模块加密,阿 ...
- iOS - Share 分享/第三方登录
1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...
随机推荐
- HDU_1158_Employment Planning_dp
Employment Planning Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 项目关联到svn
最近因为要升级项目,改用64位的eclipse,原先已经被svn管理的项目需要被复制到另一个工作空间,只需要导入并复制项目到新的工作空间即可 右键,点import 选择已经存在的项目导入工作空间 选择 ...
- Python 之类型转换
# int(x[, base]) 将x转换为一个整数,base为进制,默认十进制 # # long(x[, base] ) 将x转换为一个长整数 # # float(x) 将x转换到一个浮点数 # # ...
- Git学习总结二(版本回退)
修改修改仓库中readme.txt文件,然后用git status命令看看结果: $ git status On branch master Changes not staged for commit ...
- How To:配置Linux iSCSI客户端
1.安装客户端 [root@node01 Packages]# rpm -Uvh iscsi-initiator-utils-6.2.0.873-2.el6.x86_64.rpm warning: i ...
- STL源码分析之内存池
前言 上一节只分析了第二级配置器是由多个链表来存放相同内存大小, 当没有空间的时候就向内存池索取就行了, 却没有具体分析内存池是怎么保存空间的, 是不是内存池真的有用不完的内存, 本节我们就具体来分析 ...
- zabbix4.0搭建(基于CentOS6.8)
环境 服务端:188.188.3.241,系统:centos6.8,mysql:5.7.3,php:5.4.9,nginx:1.12.0 一.nginx编译安装 NGINX_VERSION=1.1 ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
- 多层gmetad配置
经实验表明: ①多层gmetad与ganglia版本无关,且可以多版本兼容 ②多层gmetad只有最底层gmetad能保存详细指标,非底层gmetad收集到的都只能是summary信息,当然也许我配置 ...
- selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码
目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...