给定平面上的一些点,它们是不同的,并且没有三个点位于同一条线上。我们需要找到顶点作为给定点的平行四边形的数量。
例子:
输入:points[] = {(0, 0), (0, 2), (2, 2), (4, 2), (1, 4), (3, 4)} 输出:2 两个平行四边形是可能的通过选择上面给定的点作为顶点,如下图所示。
我们可以通过使用平行四边形的一个特殊性质来解决这个问题,即平行四边形的对角线在中间相互交叉。所以如果我们得到这样一个中点,它是多个线段的中点,那么我们可以得出一个平行四边形存在的结论,如果中点出现x次更准确,那么可以在x C 2中选择可能的平行四边形的对角线方式,即会有 x*(x-1)/2 个平行四边形对应于这个特定的中点,频率为 x。所以我们迭代所有的点对,我们计算它们的中点并将中点的频率增加 1。最后,我们根据每个不同的中点的频率计算平行四边形的数量,如上所述。由于我们只需要中点的频率,为简单起见,在计算中点时忽略除以 2。
// C++ program to get number of Parallelograms we
// can make by given points of the plane
#include
using namespace std;
// Returns count of Parallelograms possible
// from given points
int countOfParallelograms(int x[], int y[], int N)
{
// Map to store frequency of mid points
map, int> cnt;
for (int i=0; isecond;
// Increase the count of Parallelograms by
// applying function on frequency of mid point
res += freq*(freq - 1)/2
}
return res;
}
// Driver code to test above methods
int main()
{
int x[] = {0, 0, 2, 4, 1, 3};
int y[] = {0, 2, 2, 2, 4, 4};
int N = sizeof(x) / sizeof(int);
cout << countOfParallelograms(x, y, N) << endl;
return 0;
}
输出:
2
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。