Check if it is possible to move from (0, 0) to (X, Y) in exactly K steps
Last Updated :
19 Mar, 2022
Given a point (X, Y) in a 2-D plane and an integer K, the task is to check whether it is possible to move from (0, 0) to the given point (X, Y) in exactly K moves. In a single move, the positions that are reachable from (X, Y) are (X, Y + 1), (X, Y – 1), (X + 1, Y) and (X – 1, Y).
Examples:
Input: X = 0, Y = 0, K = 2
Output: Yes
Move 1: (0, 0) -> (0, 1)
Move 2: (0, 1) -> (0, 0)
Input: X = 5, Y = 8, K = 20
Output: No
Approach: It is clear that the shortest path to reach (X, Y) from (0, 0) will be minMoves = (|X| + |Y|). So, if K < minMoves then it is impossible to reach (X, Y) but if K ? minMoves then after reaching (X, Y) in minMoves number of moves the remaining (K – minMoves) number of moves have to be even in order to remain at that point for the rest of the moves.
So it is possible to reach (X, Y) from (0, 0) only if K ? (|X| + |Y|) and (K – (|X| + |Y|)) % 2 = 0.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPossible( int x, int y, int k)
{
int minMoves = abs (x) + abs (y);
if (k >= minMoves && (k - minMoves) % 2 == 0)
return true ;
return false ;
}
int main()
{
int x = 5, y = 8, k = 20;
if (isPossible(x, y, k))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
class GFG
{
static boolean isPossible( int x, int y, int k)
{
int minMoves = Math.abs(x) + Math.abs(y);
if (k >= minMoves && (k - minMoves) % 2 == 0 )
return true ;
return false ;
}
public static void main (String[] args)
{
int x = 5 , y = 8 , k = 20 ;
if (isPossible(x, y, k))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
def isPossible(x, y, k):
minMoves = abs (x) + abs (y)
if (k > = minMoves and (k - minMoves) % 2 = = 0 ):
return True
return False
x = 5
y = 8
k = 20
if (isPossible(x, y, k)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG
{
static bool isPossible( int x, int y, int k)
{
int minMoves = Math.Abs(x) + Math.Abs(y);
if (k >= minMoves && (k - minMoves) % 2 == 0)
return true ;
return false ;
}
public static void Main ()
{
int x = 5, y = 8, k = 20;
if (isPossible(x, y, k))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function isPossible(x , y , k)
{
var minMoves = Math.abs(x) + Math.abs(y);
if (k >= minMoves && (k - minMoves) % 2 == 0)
return true ;
return false ;
}
var x = 5, y = 8, k = 20;
if (isPossible(x, y, k))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...