Given a point (x, y). Find whether it is possible or not to move from (0, 0) to (x, y) in exactly n steps. 4 types of steps are valid, you can move from a point (a, b) to either of (a, b+1), (a, b-1), (a-1, b), (a+1, b)
Examples:
Input: x = 0, y = 0, n = 2
Output: POSSIBLEInput: x = 1, y = 1, n = 3
Output: IMPOSSIBLE
Approach :
In the shortest path, one can move from (0, 0) to (x, y) in |x| + |y|. So, it is not possible to move from (0, 0) to (x, y) in less than |x| + |y| steps. After reaching one can take two more steps as (x, y) -> (x, y+1) -> (x, y).
So, it is possible if
n >= |x| + |y| and ( n-( |x| + |y| ) ) % 2 = 0.
Below is the implementation of the above approach:
// CPP program to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps #include <bits/stdc++.h> using namespace std;
// Function to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps bool Arrive( int a, int b, int n)
{ if (n >= abs (a) + abs (b) and (n - ( abs (a) + abs (b))) % 2 == 0)
return true ;
return false ;
} // Driver code int main()
{ int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
} |
// C program to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps #include <stdio.h> #include <stdbool.h> int abs ( int a)
{ int abs = a;
if ( abs < 0)
abs = abs * (-1);
return abs ;
} // Function to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps bool Arrive( int a, int b, int n)
{ if (n >= abs (a) + abs (b) && (n - ( abs (a) + abs (b))) % 2 == 0)
return true ;
return false ;
} // Driver code int main()
{ int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
printf ( "Yes" );
else
printf ( "No" );
return 0;
} // This code is contributed by kothavvsaakash. |
// Java program to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps import java.io.*;
public class GFG {
// Function to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps static boolean Arrive( int a, int b, int n)
{ if (n >= Math.abs(a) + Math.abs(b) && (n - (Math.abs(a) + Math.abs(b))) % 2 == 0 )
return true ;
return false ;
} // Driver code int main()
{ return 0 ;
} public static void main (String[] args) {
int a = 5 , b = 5 , n = 11 ;
if (Arrive(a, b, n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
} //This code is contributed by shs.. |
# Python3 program to check whether # it is possible or not to move from # (0, 0) to (x, y) in exactly n steps # Function to check whether it is # possible or not to move from # (0, 0) to (x, y) in exactly n steps def Arrive(a, b, n):
if (n > = abs (a) + abs (b) and
(n - ( abs (a) + abs (b))) % 2 = = 0 ):
return True
return False
# Driver code a = 5
b = 5
n = 11
if (Arrive(a, b, n)):
print ( "Yes" )
else :
print ( "No" )
# This code is contributed # by Yatin Gupta |
// C# program to check whether // it is possible or not to // move from (0, 0) to (x, y) // in exactly n steps using System;
class GFG
{ // Function to check whether it // is possible or not to move // from (0, 0) to (x, y) in // exactly n steps static bool Arrive( int a, int b, int n)
{ if (n >= Math.Abs(a) + Math.Abs(b) &&
(n - (Math.Abs(a) + Math.Abs(b))) % 2 == 0)
return true ;
return false ;
} // Driver code public static void Main ()
{ int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
} // This code is contributed by shashank |
<?php // PHP program to check whether // it is possible or not to move // from (0, 0) to (x, y) in exactly n steps // Function to check whether it // is possible or not to move // from (0, 0) to (x, y) in exactly n steps function Arrive( $a , $b , $n )
{ if ( $n >= abs ( $a ) + abs ( $b ) and
( $n - ( abs ( $a ) + abs ( $b ))) % 2 == 0)
return true;
return false;
} // Driver code $a = 5; $b = 5; $n = 11;
if (Arrive( $a , $b , $n ))
echo "Yes" ;
else echo "No" ;
// This code is contributed // by Akanksha Rai(Abby_akku) |
<script> // JavaScript program to check whether it is // possible or not to move from (0, 0) to (x, y) // in exactly n steps // Function to check whether it is possible // or not to move from (0, 0) to (x, y) // in exactly n steps function Arrive(a, b, n)
{ if (n >= Math.abs(a) + Math.abs(b) &&
(n - (Math.abs(a) + Math.abs(b))) % 2 == 0)
return true ;
return false ;
} // Driver code var a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
document.write( "Yes" );
else document.write( "No" );
// This code is contributed by Ankita saini </script> |
No
Time Complexity: O(1)
Auxiliary Space: O(1) because using constant space.