


Given a starting point (startX, startY) and target point(endX, endY) . Return true if there is a sequence of moves to transform the starting point into the ending point. In one move you can transform (x, y) to either (x + y, y) or (x, x + y).
The first line of input contains an integer ‘T’ denoting the number of test cases.
The next ‘T’ lines represent the test cases.
The first and the only line of each test case contains 4 integers startX,startY,endX, and endY.
Output Format
For each test case, print true if there is a sequence of moves to transform the starting point into the ending point, otherwise print false.
Note:
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= ’T’ <= 50
1 <= ’startX’, ’startY’, ’targetX’, ’targetY’ <= 10^9
‘startX’, ’startY’ denotes starting coordinates.
‘endX’, ’endY’ denotes target coordinates.
Time Limit: 1 sec
2
1 1 5 8
3 5 7 9
true
false
For the first test case, the sequence of moves
(1,1)->(2,1)
(2,1)->(2,3)
(2,3)->(5,3)
(5,3)->(5,8)
Hence the answer for this case is true.
For the second test case, there is not a possible sequence to reach the final points.
2
1 1 1 1000
1 1 1000 1
true
true
Think of BFS to solve this problem.
The key id is to do bfs traversal from (startX, startY) to (targetX, targetY).If it is possible to reach targetX, targetY return true.
Here is the Algorithm:
O(N) where N is max(targetX-startX,targetY-startY)
In worse case to reach targetX and targetY will take max(targetX - startX, targetY - startY) steps.
O(N) where N is max(targetX - startX, targetY - startY)
In worse case queue will store max(targetX - startX, targetY - startY) vertices.