# Check if it is possible to move from (0, 0) to (x, y) in N steps

• Difficulty Level : Basic
• Last Updated : 26 Aug, 2022

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++

 `// CPP program to check whether it is possible``// or not to move from (0, 0) to (x, y)``// in exactly n steps``#include ``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

 `// C program to check whether it is possible``// or not to move from (0, 0) to (x, y)``// in exactly n steps``#include ``#include ` `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

 `// 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

 `# 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#

 `// 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

 `= ``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)`

## Javascript

 ``

Output:

`No`

Time Complexity: O(1)
Auxiliary Space: O(1) because using constant space.

My Personal Notes arrow_drop_up