正方形计数问题(穷举+pair+struct/C++)

该博客介绍了一个计算平面上N个点构成的正方形数量的问题。通过输入坐标,程序利用穷举方法和坐标相对关系求解,并提供了解决超时问题的记忆化机制。代码中使用pair和bool数组来存储和判断坐标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



正方形计数 count
【问题描述】给定平面上N个点,你需要计算以其中4个点为顶点的正方形的个数。
注意:这里的正方形边不一定需要和坐标轴平行。
【输入格式】
输入文件中仅一行为一个整数N。
接下来的N行,每行有两个整数xi,yi,分别表示N个点的坐标。
【输出格式】
输出文件中仅一行为一个整数,即正方形的个数。
【输入输出样例】
输入:
7
0 0
0 1
1 0
1 1
1 2
2 1
2 2
输出:
3
【数据范围】
对于20%的数据,满足:1<=N<=20;
对于100%的数据,满足:1<=N<=500,-50<=X[i],Y[i]<=50,点不会重叠

在一个正方形中,给定两个节点的坐标与它们的相对位置后,另外两个节点的坐标就固定了,我们利用这个性质来进行穷举,题目数据范围不大,不会超时,并且程序中使用记忆化机制进行限制。代码中的坐标用pair数组和bool数组进行双重存储,代码如下

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

pair<int,int>node[501];
bool vis[501][501];
bool nodesquare[101][101];
int n;

struct dbnode
{
	int x1,y1;
	int x2,y2;
};

dbnode makesquare(int xx1,int yy1,int xx2,int yy2)
{
	int a=xx1-xx2;
	int b=yy2-yy1;
	dbnode ans;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值