HihoCoder1442 Smallest Rectangle【map】

传送门:HihoCoder1442 Smallest Rectangle

题目描述

在这里插入图片描述

测试样例

Sample Input
9  
0 0  
0 1   
0 4  
1 0  
1 1  
1 4  
4 0  
4 1  
4 4

Sample Output
1

题目大意

  给定N个二维坐标,问这些二维坐标能组成的四个边与轴平行的矩形的最小面积是多少。

解题思路

  双重for循环枚举两两点,当两个点是对角点时,可以判断构成要求矩形(四个边与轴平行)的另外两个对角点是否存在,存在更新最小面积即可。
  注意坐标数据有点大,要用long long。

AC代码

#include<cstdio>
#include<map>
#include<cmath>
using namespace std;
typedef long long ll;
const int MAXN=1005;
const ll INF=0x3f3f3f3f3f3f3f3f;
typedef pair<int,int> P;
P p[MAXN];
map<P,bool> mp;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&p[i].first,&p[i].second);
		mp[p[i]]=1;
	}
	ll x,y,ans=INF;
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			// 两个点在同一条线上
			if(p[i].first==p[j].first || p[i].second==p[j].second)
				continue; // 因为两个点在同一条线上就无法确定另外两个点坐标
			// 构成题目要求矩形的另外两个对角点存在
			if(mp[P(p[i].first,p[j].second)] && mp[P(p[j].first,p[i].second)])
			{
				x=abs(p[i].first-p[j].first);
				y=abs(p[i].second-p[j].second);
				ans=min(x*y,ans);// 更新最小面积
			}	
		}
	}
	if(ans==INF)
		printf("-1\n");
	else
		printf("%d\n",ans);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值