bzoj2338数矩形(rectangle)
数矩形(rectangle)
计算几何
把所有点两两连线,把这些线按长度排序,再按中点排序
能组成矩形的线一定是连续的
最坏就是所有点围成一个圆,交于圆心
复杂度O(可以过)
要用叉积,不然会被卡精
我居然认为极角序就是逆时针,错了好久
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 1505
#define eps 1e-11
using namespace std;
int n,tot;
struct po{
long long x,y,len,mx,my;
}s[maxn],a[maxn*maxn],t1,t2;
long long ans;
long long getl(int i,int j){
return (s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y);
}
bool cmp(po a,po b){
if(a.len==b.len)return a.mx<b.mx||a.mx==b.mx&&a.my<b.my;
return a.len<b.len;
}
long long cj(po a,po b){
return a.x*b.y-a.y*b.x;
}
bool pd(int i,int j)
{
if(getl(a[i].x,a[j].x)!=getl(a[i].y,a[j].y))return 0;
if(getl(a[i].x,a[j].y)!=getl(a[i].y,a[j].x))return 0;
return 1;
}
long long size(int i,int j){
po h[4];
h[0]=s[a[i].x],h[1]=s[a[j].y];
h[2]=s[a[i].y],h[3]=s[a[j].x];
long long sum=0;
for(int i=0;i<4;i++){
sum+=cj(h[i],h[(i+1)%4]);
}
return abs(sum);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%lld%lld",&s[i].x,&s[i].y);
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
a[++tot].x=i,a[tot].y=j;
a[tot].mx=s[i].x+s[j].x,a[tot].my=s[i].y+s[j].y;
a[tot].len=getl(i,j);
}
}
sort(a+1,a+tot+1,cmp);
int l=1,now=1;
while(l<=tot){
while(a[l].len==a[now].len&&a[now].mx==a[l].mx&&a[now].my==a[l].my&&now<=tot)now++;
now--;
for(int i=l;i<=now;i++){
for(int j=i+1;j<=now;j++){
if(pd(i,j)){
ans=max(ans,size(i,j));
}
}
}
now++;l=now;
}
cout<<(long long)ans/2<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构