P1959 遗址_NOI导刊2009普及(6)
题意:平面上n个点(坐标$0\le x,y\le 5000,n \le 3000$)
求以其中四个点为顶点的正方形的最大面积
$O(n^2)$枚举两个点作为当前正方形的对角线
那么如何求出另外两个点呢?
设一个点为$(ax,ay)$,另一个为$(bx,by)$
所求点$(cx,cy),(dx,dy)$
考虑正方形中点$(\frac{ax+bx}{2},\frac{ay+by}{2})$
可以求出左边的向量为$(\frac{bx-ax}{2},\frac{by-ay}{2})$
右边的向量等于左边的向量旋转(自己举例推)$(\frac{by-ay}{2},\frac{ax-bx}{2})$
于是,右下角的点的坐标等于中点加右边的向量
左上角点的坐标等于中点减右边的向量
如果那两个点是小数,是不成立的
怎么判断呢?
可以发现,那两个点的结果是由ax,ay,bx,by通过加加减减之后除以二得到的,
也就是说ax,ay,bx,by通过加加减减得到的应该是偶数
因此ax,ay,bx,by中必须要有偶数个奇数才成立!
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
int n;
struct node
{
int x;
int y;
}E[];
bool vis[][];
int ans;
double eps=1e-;
inline int ok(int i,int j)
{
int ax=E[i].x;
int ay=E[i].y;
int bx=E[j].x;
int by=E[j].y;
if((ax^ay^bx^by)&) return -; //判断是否有奇数个奇数
int cx=(ax+bx+by-ay)>>; //四个点的坐标
int cy=(ay+by+ax-bx)>>;
int dx=(ax+bx-by+ay)>>;
int dy=(ay+by-ax+bx)>>;
if(cx<||cy<||dx<||dy<||cx>||cy>||dx>||dy>||!vis[cx][cy]||!vis[dx][dy]) return -; //没超范围并且点存在
int fx=cx-ax;
int fy=cy-ay;
return fx*fx+fy*fy; //面积
}
int main()
{
n=read();
for(int i=;i<=n;i++)
{
E[i].x=read();
E[i].y=read();
vis[E[i].x][E[i].y]=true;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j) continue;
ans=max(ans,ok(i,j));
}
put(ans);
olinr ~~(^_^)+love_nmr;
}
P1959 遗址_NOI导刊2009普及(6)的更多相关文章
- 几何+暴力【p1959】 遗址[NOI导刊2009普及(6)]
题目描述--> P1959 遗址_NOI导刊2009普及(6) 普通方法分析: 因为题目要求是找最大正方形(如果是长方形更麻烦. 讲真,题目不难,耗时间! 根据题目要求,我们要找的是正方形. 我 ...
- 洛谷——P1958 上学路线_NOI导刊2009普及(6)
P1958 上学路线_NOI导刊2009普及(6) 题目描述 你所在城市的街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道.南北方向的a条街道从西到东依次编号为l到a,而东西方向的b条街道从 ...
- Luogu [P1958] 上学路线_NOI导刊2009普及(6)
上学路线_NOI导刊2009普及(6) 题目详见:上学路线_NOI导刊2009普及(6) 这是一道基础的DFS(深搜)题,堪称模板,是新手练习搜索与回溯的好题选. 大致思路:从(1,1)开始搜索,每次 ...
- 洛谷 P1767 家族_NOI导刊2010普及(10)
题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...
- 洛谷——P1767 家族_NOI导刊2010普及(10)
P1767 家族_NOI导刊2010普及(10) 题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝 ...
- 洛谷 P1765 手机_NOI导刊2010普及(10)
题目描述 一般的手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 # 要按出英文字母就必须要按数字键多下.例如要按出 ...
- P1765 手机_NOI导刊2010普及(10)
P1765 手机_NOI导刊2010普及(10) 题目描述 一般的手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz * 0 ...
- 洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)
P1952 火星上的加法运算_NOI导刊2009提高(3) 题目描述 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限.她想向你求助,作为一位优秀的程序员,你当然不会拒 ...
- 洛谷—— P1765 手机_NOI导刊2010普及(10)
https://www.luogu.org/problem/show?pid=1765#sub 题目描述 一般的手机的键盘是这样的: 1 2 abc 3 def 4 ghi 5 jkl 6 mno 7 ...
随机推荐
- java基础知识(15)----StringBuffer与StringBuilder
StringBuffer字符串缓冲区: 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符.特点:1:可以对字符串内容进行修改.2:是一个容器.3:是可变长度的.4:缓冲区中可以存储任意类型 ...
- mysql的默认隔离级别
原文:https://www.cnblogs.com/rjzheng/p/10510174.html 知识点总结 ------------------------------------------- ...
- Java知识点总结1
1.java的引用传递和值传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参 ...
- sizeof总结
1.sizeof常用总结 ①与strlen比较 strlen 计算字符串的字符数,以"\0"为结束判断,但不统计结束符. sizeof 计算数据(数组.变量.类型. ...
- IDEA01 创建java项目、创建web项目
注意:本教程使用的开发环境是:(专业版) 1 创建javaSE项目 1.1 file -> new -> project 注意:如果是第一次使用,就需要配置 project SDK , ...
- 27-1/x+1/y=1/n
链接:https://www.nowcoder.com/acm/contest/90/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
- ARC059F
传送门 分析 见ptx大爷博客 代码 #include<iostream> #include<cstdio> #include<cstring> #include& ...
- 10.model/view实例(2)
任务:显示一个2x3的表格,将表格中的数据显示如下: 思考: 1.如何显示数据和上个例子一样. 2.但是每个单元格的数据都是有角色划分的. Qt::ItemDataRole 3.View从Model中 ...
- RabbitMQ 相关概念和方法详解
名词解释 ConnectionFactory: 与 RabbitMQ 服务器连接的管理器. Connection: 与 RabbitMQ 服务器的连接. Channel: 与 Exchange 的连接 ...
- Spring第四篇
在spring第三篇中介绍了bean元素属性 在第四篇中介绍spring注入的方式 1 set方法注入 建立一个User类 创建私有的属性 set get 方法 重写toString方法 代码如下 ...