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

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


正方形计数 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;
	
题目描述 在一个神秘的奇幻世界里,夜影行者・星耀是一位勇敢的魔法探索者。他来到了一个由神奇力量构成的 7×7 的区域。这个区域由一个个闪耀着光芒的方块组成,每个方块的颜色要么是神秘的黑色,要么是纯净的白色。 星耀发现,这个区域中存在着一种特殊的魔法规则。如果存在黑色方块与其对角线四个相邻方块也是黑色的情况,就会引发不稳定的魔法波动。他深知必须尽快解决这个问题,以确保这个神秘区域的安全。 1 2 3 4 5 6 7 W W W W W W W W W W W B B B W W W W W B W W W B B B B B W W W B W W W W W B B B W W W W W W W W W 他仔细观察着这些方块,发现最初有黑色方块的位置违反了条件。经过深思熟虑,星耀决定施展他的魔法。在一次操作中,他可以选择任何一个方块并改变其颜色(黑色↔白色)。他精准地找到了那个关键的方块,只要翻转这一个方块,整个区域的魔法能量就会恢复正常。 星耀集中精力,施展魔法,成功地改变了那个方块的颜色。瞬间,这个 7×7 的区域恢复了稳定,魔法的力量再次和谐地流动起来。 1 2 3 4 5 6 7 W W W W W W W W W W W B B B W W W W W B W W W B B W B B W W W B W W W W W B B B W W W W W W W W W 那么,如果你是夜影行者・星耀,在面对这样的情况时,最少需要翻转几个方块呢? 输入格式 第一行为 n, 代表接下来有多少区域。 接下来就有 7 x n ,每7行代表一个区域。 输出格式 n 行, 每行代表一个区域最少反转次数。 输入样例 样例一 输入样例 3 WBWWBWW WBBBBBB WBWBBBW WWBBBBB WBWBWWW WWBBBWW WBBBBWW WBWBWWW WBWBBWW WBBBBBW WBBBBBW WBBBBBW WWBWBWW WWBWWBW WWWBWWW BWWBWWW WWWWBBB WBWWBBB WBWWBBB WBWBWWW WWBWBWW ​ 输出样例一 3 2 1 ​ 数据范围 数据确保矩阵大小为 7 x 7, 只有黑白方块 1≤t≤200 使用C++来写
最新发布
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值