 Open in App
Not now

# Check if it is possible to reach vector B by rotating vector A and adding vector C to it

• Last Updated : 25 May, 2022

Given three 2-Dimensional vector co-ordinates A, B and C. The task is to perform below operations any number of times on vector A to get vector B

• Rotate the vector 90 degrees clockwise.
• Add vector C to it.

Print “YES” B is obtained using the above operations, else Print “NO”.
Examples:

```Input: Vector A: 2 3, Vector B: 2 3, Vector C: 0 0
Output: YES
The given vector A has coordinate (2, 3) and we need to
convert this vector A to vector B which is also (2, 3).
By rotating vector A 4 times by 90 degrees and adding
it to vector C(0, 0) will give us vector B(2, 3).

Input: Vector A: 0 0, Vector B: 1 1, Vector C: 2 2
Output: NO``` Below is the step by step algorithm to solve this problem:

• Initialize three vectors of 2-D coordinates as A ( a, b ), B ( x, y ) and C ( p, q ).
• Coordinates of vector A can be of any quadrant. So, initialize a check function for all the quadrant and check if any of it is true.
• Find a-x and b-y, which will tell us how much we need to make it to vector B.
• Initialize d = p*p + q*q. If d = 0 then you need not to add anything in vector A.
• If D > 0, then check if a*p + b*q and b*p – a*q is in the multiple of ‘d’ so that it is possible to get the vector B.

Below is the implementation of above algorithm:

## C++

 `// C++ program to Check if it is` `// possible to reach vector B by` `// Rotating vector A and adding` `// vector C to it any number of times`   `#include ` `using` `namespace` `std;` `#define ll long long`   `// function to check if vector B is` `// possible from vector A` `ll check(ll a, ll b, ll p, ll q)` `{` `    ``ll d = p * p + q * q;`   `    ``// if d = 0, then you need to add nothing to vector A` `    ``if` `(d == 0)` `        ``return` `a == 0 && b == 0;` `    ``else` `        ``return` `(a * p + b * q) % d == 0 && (b * p - a * q) % d == 0;` `}`   `bool` `check(``int` `a, ``int` `b, ``int` `x, ``int` `y, ``int` `p, ``int` `q)` `{` `    ``// for all four quadrants` `    ``if` `(check(a - x, b - y, p, q)` `        ``|| check(a + x, b + y, p, q)` `        ``|| check(a - y, b + x, p, q)` `        ``|| check(a + y, b - x, p, q))` `        ``return` `true``;` `    ``else` `        ``return` `false``;` `}`   `// Driver code` `int` `main()` `{` `    ``// initialize all three` `    ``// vector coordinates`   `    ``int` `a = -4, b = -2;` `    ``int` `x = 0, y = 0;` `    ``int` `p = -2, q = -1;`   `    ``if` `(check(a, b, x, y, p, q))` `        ``cout << ``"Yes"``;` `    ``else` `        ``cout << ``"No"``;`   `    ``return` `0;` `}`

## Java

 `// Java program to Check if it is ` `// possible to reach vector B by ` `// Rotating vector A and adding ` `// vector C to it any number of times.` `  `  `public` `class` `GFG {`   `    ``// function to check if vector B is ` `    ``// possible from vector A ` `    ``static` `boolean` `check(``long` `a, ``long` `b, ``long` `p, ``long` `q) ` `    ``{ ` `        ``long` `d = p * p + q * q; ` `      `  `        ``// if d = 0, then you need to add nothing to vector A ` `        ``if` `(d == ``0``) ` `            ``return` `a == ``0` `&& b == ``0``; ` `        ``else` `            ``return` `(a * p + b * q) % d == ``0` `&& (b * p - a * q) % d == ``0``; ` `    ``} ` `      `  `    ``static` `boolean` `check(``int` `a, ``int` `b, ``int` `x, ``int` `y, ``int` `p, ``int` `q) ` `    ``{ ` `        ``// for all four quadrants ` `        ``if` `(check(a - x, b - y, p, q) ` `            ``|| check(a + x, b + y, p, q) ` `            ``|| check(a - y, b + x, p, q) ` `            ``|| check(a + y, b - x, p, q)) ` `            ``return` `true``; ` `        ``else` `            ``return` `false``; ` `    ``} ` `      `    `    ``// Driver code` `    ``public` `static` `void` `main(String args[])` `    ``{` `        ``// initialize all three ` `        ``// vector coordinates ` `      `  `        ``int` `a = -``4``, b = -``2``; ` `        ``int` `x = ``0``, y = ``0``; ` `        ``int` `p = -``2``, q = -``1``; ` `      `  `        ``if` `(check(a, b, x, y, p, q)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    `  `    ``}` `    ``// This Code is contributed by ANKITRAI1` `}`

## Python3

 `# Python3 program to Check if it ` `# is possible to reach vector B ` `# by Rotating vector A and adding` `# vector C to it any number of times`   `# function to check if vector B ` `# is possible from vector A` `def` `check(a, b, p, q):`   `    ``d ``=` `p ``*` `p ``+` `q ``*` `q;`   `    ``# if d = 0, then you need to ` `    ``# add nothing to vector A` `    ``if` `(d ``=``=` `0``):` `        ``return` `a ``=``=` `0` `and` `b ``=``=` `0``;` `    ``else` `:` `        ``return` `((a ``*` `p ``+` `b ``*` `q) ``%` `d ``=``=` `0` `and` `                ``(b ``*` `p ``-` `a ``*` `q) ``%` `d ``=``=` `0``);`   `def` `checks(a, b, x, y, p, q):`   `    ``# for all four quadrants` `    ``if` `(check(a ``-` `x, b ``-` `y, p, q) ``or` `        ``check(a ``+` `x, b ``+` `y, p, q) ``or` `        ``check(a ``-` `y, b ``+` `x, p, q) ``or` `        ``check(a ``+` `y, b ``-` `x, p, q)):` `        ``return` `True``;` `    ``else``:` `        ``return` `False``;`   `# Driver code`   `# initialize all three` `# vector coordinates` `a ``=` `-``4``;` `b ``=` `-``2``;` `x ``=` `0``;` `y ``=` `0``;` `p ``=` `-``2``;` `q ``=` `-``1``;`   `if` `(checks(a, b, x, y, p, q)):` `    ``print``( ``"Yes"``);` `else``:` `    ``print` `(``"No"``);`   `# This code is contributed` `# by Shivi_Aggarwal`

## C#

 `// C# program to Check if it is ` `// possible to reach vector B by ` `// Rotating vector A and adding ` `// vector C to it any number of times.` `using` `System;` `class` `GFG ` `{`   `// function to check if vector B is ` `// possible from vector A ` `static` `bool` `check(``long` `a, ``long` `b, ` `                  ``long` `p, ``long` `q) ` `{ ` `    ``long` `d = p * p + q * q; ` `    `  `    ``// if d = 0, then you need to` `    ``// add nothing to vector A ` `    ``if` `(d == 0) ` `        ``return` `a == 0 && b == 0; ` `    ``else` `        ``return` `(a * p + b * q) % d == 0 && ` `               ``(b * p - a * q) % d == 0; ` `} ` `    `  `static` `bool` `check(``int` `a, ``int` `b, ``int` `x, ` `                  ``int` `y, ``int` `p, ``int` `q) ` `{ ` `    ``// for all four quadrants ` `    ``if` `(check(a - x, b - y, p, q) || ` `        ``check(a + x, b + y, p, q) || ` `        ``check(a - y, b + x, p, q) || ` `        ``check(a + y, b - x, p, q)) ` `        ``return` `true``; ` `    ``else` `        ``return` `false``; ` `} ` `    `  `// Driver code` `public` `static` `void` `Main()` `{` `    ``// initialize all three ` `    ``// vector coordinates ` `    ``int` `a = -4, b = -2; ` `    ``int` `x = 0, y = 0; ` `    ``int` `p = -2, q = -1; ` `    `  `    ``if` `(check(a, b, x, y, p, q)) ` `        ``Console.Write(``"Yes"``); ` `    ``else` `        ``Console.Write(``"No"``); ` `}` `}`   `// This code is contributed` `// by ChitraNayal`

## PHP

 ``

## Javascript

 ``

Output:

`Yes`

Time Complexity: O(1)
Auxiliary space: O(1)

My Personal Notes arrow_drop_up
Related Articles