📌  相关文章
📜  非整数距离的最大积分坐标

📅  最后修改于: 2021-10-23 08:47:46             🧑  作者: Mango

给定 x 坐标和 y 坐标的最大限制,我们想要计算一组坐标,使得任意两点之间的距离是非整数。选择的坐标 (i, j) 应在 0<=i<=x 和 0<=j<=y 范围内。此外,我们必须最大化集合。

例子:

Input : 4 4
Output : 0 4
         1 3
         2 2
         3 1
         4 0
Explanation : Distance between any two points
mentioned in output is not integer.

首先,我们要创建一个集合,这意味着我们的集合不能包含任何其他与之前使用过的 x 或 y 相同的点。好吧,其背后的原因是具有相同 x 坐标或 y 坐标的点会取消该坐标,从而导致它们之间的距离为整数。
例如,考虑点 (1, 4) 和 (1, 5),x 坐标将取消,因此,我们将得到积分距离。
其次,我们可以观察到,我们只有 x+1 个不同的 i 坐标和 y+1 个不同的 j 坐标。因此,集合的大小不能超过 min(x, y)+1。
第三个观察是我们知道对角线元素是 |ij|* sqrt(2)    距离相距,因此,我们沿 i 坐标的对角元素进行求值,并通过公式 min(i, j)-i 计算 j 坐标。

C++
// C++ program to find maximum integral points
// such that distances between any two is not
// integer.
#include 
using namespace std;
 
// Making set of coordinates such that
// any two points are non-integral distance apart
void printSet(int x, int y)
{
    // used to avoid duplicates in result
    set > arr;
     
    for (int i = 0; i <= min(x, y); i++) {
 
        pair pq;
        pq = make_pair(i, min(x, y) - i);
        arr.insert(pq);
    }
 
    for (auto it = arr.begin(); it != arr.end(); it++)
        cout << (*it).first << " " << (*it).second << endl;
}
 
// Driver function
int main()
{
    int x = 4, y = 4;
    printSet(x, y);
    return 0;
}


Python3
# Python3 program to find maximum integral points
# such that distances between any two is not
# integer.
 
# Making set of coordinates such that
# any two points are non-integral distance apart
def printSet(x, y):
     
    # Used to avoid duplicates in result
    arr = []
 
    for i in range(min(x, y) + 1):
        pq = [i, min(x, y) - i]
        arr.append(pq)
 
    for it in arr:
        print(it[0], it[1])
 
# Driver code
if __name__ == "__main__":
 
    x = 4
    y = 4
     
    printSet(x, y)
 
# This code is contributed by ukasp


Javascript


输出:

0 4
1 3
2 2
3 1
4 0

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。