Check if it is possible to move from (0, 0) to (x, y) in N steps
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: POSSIBLE
Input: 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:
C++
#include <bits/stdc++.h>
using namespace std;
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 ;
}
int main()
{
int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
C
#include <stdio.h>
#include <stdbool.h>
int abs ( int a)
{
int abs = a;
if ( abs < 0)
abs = abs * (-1);
return abs ;
}
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 ;
}
int main()
{
int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
printf ( "Yes" );
else
printf ( "No" );
return 0;
}
|
Java
import java.io.*;
public class GFG {
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 ;
}
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" );
}
}
|
Python3
def Arrive(a, b, n):
if (n > = abs (a) + abs (b) and
(n - ( abs (a) + abs (b))) % 2 = = 0 ):
return True
return False
a = 5
b = 5
n = 11
if (Arrive(a, b, n)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG
{
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 ;
}
public static void Main ()
{
int a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
PHP
<?php
function Arrive( $a , $b , $n )
{
if ( $n >= abs ( $a ) + abs ( $b ) and
( $n - ( abs ( $a ) + abs ( $b ))) % 2 == 0)
return true;
return false;
}
$a = 5; $b = 5; $n = 11;
if (Arrive( $a , $b , $n ))
echo "Yes" ;
else
echo "No" ;
|
Javascript
<script>
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 ;
}
var a = 5, b = 5, n = 11;
if (Arrive(a, b, n))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1) because using constant space.
Last Updated :
26 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...