博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2338[HNOI2011]数矩形 计算几何
阅读量:5222 次
发布时间:2019-06-14

本文共 1159 字,大约阅读时间需要 3 分钟。

2338: [HNOI2011]数矩形

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 1535  Solved: 693
[][][]

Description

Input

 

Output

 

Sample Input

 

Sample Output

 

HINT

 

Source

我开始想着记每条线的斜率,然后排序来找平行线,但却不能保证构成矩形。

一种新奇的思路:记录对角线,两条对角线长度相等且中点相同时可以确定一个矩形
然后题目就变得简单起来。枚举每两点,存放它们构成的线段,排序。
每条线段向前扩展找可以形成对角线的线段,找到之后更新答案。
为了避免精度错误,一切都可以用整形来计算,即算距离时不开根,中点不除2

1 #include
2 #define N 1505 3 #define ll long long 4 using namespace std; 5 int n,cnt;ll ans; 6 struct P{ 7 int x,y; 8 bool operator < (const P &b)const{
return x==b.x?y
ans)ans=tmp;23 }24 int main(){25 scanf("%d",&n);26 for(int i=1;i<=n;i++)27 scanf("%d%d",&p[i].x,&p[i].y);28 for(int i=1;i<=n;i++)29 for(int j=i+1;j<=n;j++){30 l[++cnt].len=dis(p[i],p[j]);31 l[cnt].a=p[i];l[cnt].b=p[j];32 l[cnt].mid=(P){p[i].x+p[j].x,p[i].y+p[j].y};33 }34 sort(l+1,l+1+cnt);int j;35 for(int i=1;i<=cnt;i++){36 j=i-1;37 while(l[j].len==l[i].len&&l[j].mid==l[i].mid)update(i,j--);38 }39 printf("%lld\n",ans);40 return 0;41 }

 

转载于:https://www.cnblogs.com/wsy01/p/8183807.html

你可能感兴趣的文章
软件测试-----Graph Coverage作业
查看>>
django ORM创建数据库方法
查看>>
创建Oracle synonym 详解
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
linux查看端口占用
查看>>
hdu - 1226 超级密码 (bfs)
查看>>
Sql常见面试题 受用了
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
中国剩余定理
查看>>
基础笔记一
查看>>
uva 10137 The trip
查看>>
Count Numbers
查看>>
编写高质量代码改善C#程序的157个建议——建议110:用类来代替enum
查看>>
网卡bond技术
查看>>
UITabbarController的UITabbarItem(例:"我的")点击时,判断是否登录
查看>>
UNIX基础知识之输入和输出
查看>>