Given three 2-Dimentional 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 <bits/stdc++.h> ` `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 ` `} ` |

**Output:**

Yes

## Recommended Posts:

- Check if any square (with one colored cell) can be divided into two equal parts
- Maximum Sum of Products of Two Arrays
- Program to find the Hidden Number
- Program to find the N-th term of series 3, 5, 33, 35, 53…. | Set-2
- Check if a point is inside, outside or on the parabola
- Program to find the Nth term of series -1, 2, 11, 26, 47......
- Length of longest rod that can fit into a cuboid
- Permutations to arrange N persons around a circular table
- Circumradius of the rectangle
- Area of the circumcircle of any triangles with sides given
- Find the altitude and area of an isosceles triangle
- Program to find the surface area of the square pyramid
- Program to find the Radius of the incircle of the triangle
- Area of largest triangle that can be inscribed within a rectangle
- Area of a square inscribed in a circle which is inscribed in an equilateral triangle

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.