Check if it is possible to reach (x, y) from origin in exactly Z steps using only plus movements
Last Updated :
18 Apr, 2023
Given a point (x, y), the task is to check if it is possible to reach from origin to (x, y) in exactly Z steps. From a given point (x, y) we can only moves in four direction left(x – 1, y), right(x + 1, y), up(x, y + 1) and down(x, y – 1).
Examples:
Input: x = 5, y = 5, z = 11
Output: Not Possible
Input: x = 10, y = 15, z = 25
Output: Possible
Approach:
- The shortest path from origin to (x, y), is |x|+|y|.
- So, it is clear that if Z less than |x|+|y|, then we can’t reach (x, y) from origin in exactly Z steps.
- If the number of steps is not less than |x|+|y| then, we have to check below two conditions to check if we can reach to (x, y) or not:
- If Z ? |x| + |y|, and
- If (Z – |x| + |y|)%2 is 0.
- For the second conditions in the above step, if we reach (x, y), we can take two more steps such as (x, y)–>(x, y+1)–>(x, y) to come back to the same position (x, y). And this is possible only if difference between them is even.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void possibleToReach( int x, int y, int z)
{
if (z < abs (x) + abs (y)
|| (z - abs (x) - abs (y)) % 2) {
cout << "Not Possible" << endl;
}
else
cout << "Possible" << endl;
}
int main()
{
int x = 5, y = 5;
int z = 11;
possibleToReach(x, y, z);
return 0;
}
|
Java
class GFG{
static void possibleToReach( int x, int y, int z)
{
if (z < Math.abs(x) + Math.abs(y) ||
(z - Math.abs(x) - Math.abs(y)) % 2 == 1 )
{
System.out.print( "Not Possible" + "\n" );
}
else
System.out.print( "Possible" + "\n" );
}
public static void main(String[] args)
{
int x = 5 , y = 5 ;
int z = 11 ;
possibleToReach(x, y, z);
}
}
|
Python3
def possibleToReach(x, y, z):
if (z < abs (x) + abs (y) or
(z - abs (x) - abs (y)) % 2 ):
print ( "Not Possible" )
else :
print ( "Possible" )
if __name__ = = '__main__' :
x = 5
y = 5
z = 11
possibleToReach(x, y, z)
|
C#
using System;
class GFG{
static void possibleToReach( int x, int y, int z)
{
if (z < Math.Abs(x) + Math.Abs(y) ||
(z - Math.Abs(x) - Math.Abs(y)) % 2 == 1)
{
Console.Write( "Not Possible" + "\n" );
}
else
Console.Write( "Possible" + "\n" );
}
public static void Main(String[] args)
{
int x = 5, y = 5;
int z = 11;
possibleToReach(x, y, z);
}
}
|
Javascript
<script>
function possibleToReach(x , y , z)
{
if (z < Math.abs(x) + Math.abs(y) ||
(z - Math.abs(x) - Math.abs(y)) % 2 == 1)
{
document.write( "Not Possible" + "\n" );
}
else
document.write( "Possible" + "\n" );
}
var x = 5, y = 5;
var z = 11;
possibleToReach(x, y, z);
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...