给定两个数组A[]和B[]由平面中N 个不同点的X和Y坐标以及一个正整数K 组成,任务是检查平面中是否存在任何点P使得它们之间的曼哈顿距离该点和所有给定的点最多为 K 。如果存在任何这样的点P ,则打印“是” 。否则,打印“否” 。
例子:
Input: A[] = {1, 0, 2, 1, 1}, B[] = {1, 1, 1, 0, 2}, K = 1
Output: Yes
Explanation:
Consider a point P(1, 1), then the Manhattan distance between P and all the given points are:
- Distance between P and (A[0], B[0]) is |1 – 1| + |1 – 1| = 0.
- Distance between P and (A[1], B[1]) is |1 – 0| + |1 – 1| = 1.
- Distance between P and (A[2], B[2]) is |1 – 2| + |1 – 1| = 1.
- Distance between P and (A[3], B[3]) is |1 – 1| + |1 – 0| = 1.
- Distance between P and (A[4], B[4]) is |1 – 1| + |1 – 2| = 1.
The distance between all the given points and P is at most K(= 1). Therefore, print “Yes”.
Input: A[] = {0, 3, 1}, B[] = {0, 3, 1}, K = 2
Output: No
方法:给定的问题可以通过找到每对N 个给定点之间的曼哈顿距离来解决。检查所有点对后,如果点对之间的距离计数最多为K,则打印“是” 。否则,打印“否” 。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to check if there
// exists any point with at most
// K distance from N given points
string find(int a[], int b[], int N, int K)
{
// Traverse the given N points
for(int i = 0; i < N; i++)
{
// Stores the count of pairs
// of coordinates having
// Manhattan distance <= K
int count = 0;
for(int j = 0; j < N; j++)
{
// For the same coordinate
if (i == j)
{
continue;
}
// Calculate Manhattan distance
long long int dis = abs(a[i] - a[j]) +
abs(b[i] - b[j]);
// If Manhattan distance <= K
if (dis <= K)
{
count++;
}
// If all coordinates
// can meet
if (count == N - 1)
{
return "Yes";
}
}
}
// If all coordinates can't meet
return "No";
}
// Driver Code
int main()
{
int N = 5;
int A[] = { 1, 0, 2, 1, 1 };
int B[] = { 1, 1, 1, 0, 2 };
int K = 1;
cout << find(A, B, N, K) << endl;
}
// This code is contributed by bgangwar59
Java
// Java program for the above approach
import java.io.*;
class GFG {
// Function to check if there
// exists any point with at most
// K distance from N given points
public static String find(
int[] a, int[] b, int N, int K)
{
// Traverse the given N points
for (int i = 0; i < N; i++) {
// Stores the count of pairs
// of coordinates having
// Manhattan distance <= K
int count = 0;
for (int j = 0; j < N; j++) {
// For the same coordinate
if (i == j) {
continue;
}
// Calculate Manhattan distance
long dis = Math.abs(a[i] - a[j])
+ Math.abs(b[i] - b[j]);
// If Manhattan distance <= K
if (dis <= K) {
count++;
}
// If all coordinates
// can meet
if (count == N - 1) {
return "Yes";
}
}
}
// If all coordinates can't meet
return "No";
}
// Driver Code
public static void main(String[] args)
{
int N = 5;
int[] A = { 1, 0, 2, 1, 1 };
int[] B = { 1, 1, 1, 0, 2 };
int K = 1;
System.out.println(
find(A, B, N, K));
}
}
Python3
# Python3 program for the above approach
# Function to check if there
# exists any point with at most
# K distance from N given points
def find(a, b, N, K):
# Traverse the given n points
for i in range(N):
# Stores the count of pairs
# of coordinates having
# Manhattan distance <= K
count = 0
for j in range(N):
# For the same coordinate
if (i == j):
continue
# Calculate Manhattan distance
dis = abs(a[i] - a[j]) + abs(b[i] - b[j])
# If Manhattan distance <= K
if (dis <= K):
count = count + 1
# If all coordinates
# can meet
if (count == N - 1):
return "Yes"
# If all coordinates can't meet
return "No"
# Driver code
N = 5
A = [ 1, 0, 2, 1, 1 ]
B = [ 1, 1, 1, 0, 2 ]
K = 1
print(find(A, B, N, K))
# This code is contributed by abhinavjain194
C#
// C# program for the above approach
using System;
class GFG{
// Function to check if there
// exists any point with at most
// K distance from N given points
public static String find(int[] a, int[] b,
int N, int K)
{
// Traverse the given N points
for(int i = 0; i < N; i++)
{
// Stores the count of pairs
// of coordinates having
// Manhattan distance <= K
int count = 0;
for(int j = 0; j < N; j++)
{
// For the same coordinate
if (i == j)
{
continue;
}
// Calculate Manhattan distance
long dis = Math.Abs(a[i] - a[j]) +
Math.Abs(b[i] - b[j]);
// If Manhattan distance <= K
if (dis <= K)
{
count++;
}
// If all coordinates
// can meet
if (count == N - 1)
{
return "Yes";
}
}
}
// If all coordinates can't meet
return "No";
}
// Driver Code
public static void Main(string[] args)
{
int N = 5;
int[] A = { 1, 0, 2, 1, 1 };
int[] B = { 1, 1, 1, 0, 2 };
int K = 1;
Console.WriteLine(find(A, B, N, K));
}
}
// This code is contributed by ukasp
Javascript
输出:
Yes
时间复杂度: O(N 2 )
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。