Định nghĩa vấn đề ngắn:
Adam đang đứng ở điểm & nbsp; [a, b] & nbsp; trong một lưới 2D vô hạn. Anh ta muốn biết nếu anh ta có thể đạt đến điểm & nbsp; [x, y] & nbsp; hoặc không. Hoạt động duy nhất anh ta có thể làm là di chuyển đến điểm & nbsp; [a+b, b] [a, b+a] [a-b, b] hoặc [a, b-a] & nbsp; từ một số điểm & nbsp; [a, b]. Nó được cho là anh ta có thể di chuyển đến bất kỳ điểm nào trên lưới 2D này, tức là, các điểm có tọa độ tích cực hoặc âm & nbsp; [hoặc & nbsp;].
Nói với Adam rằng anh ta có thể tiếp cận & nbsp; & nbsp; hay không.
Liên kếtCó thể là con đường
Complexity:Độ phức tạp về thời gian là O [log [n]]
Độ phức tạp không gian là O [1]
Execution:Tuyên bố vấn đề không yêu cầu đường dẫn từ A, B đến X, Y, chỉ là một đường dẫn tồn tại. Điều này làm cho nó một vấn đề toán học.
Chúng tôi biết rằng GCD [A, B] == GCD [A+B, B] == GCD [A-B, B]. Tại sao? Bởi vì nếu một cái gì đó là một ước số D của B, việc thêm/trừ B từ bất kỳ số A nào cũng chia hết bởi D sẽ không thay đổi yêu cầu chia rẽ.
Do đó GCD [a, b] == gcd [a+n*b, b+m*a] trong đó n, m là số nguyên.
Theo các quy tắc, chúng ta có thể nhận ra rằng GCD [A+N*B, B+M*A] là GCD [X, Y], dẫn chúng ta đến giải pháp cuối cùng.
Solution:def gcd[a, b]: if a % b == 0: return b else: return gcd[b, a % b] def solve[a, b, x, y]: return gcd[a,b] == gcd[x,y]
Nếu bạn thích bài đăng này, thì hãy chắc chắn rằng bạn đăng ký nhận bản tin và/hoặc nguồn cấp dữ liệu của tôi.
Mô tả câu hỏi Bạn được cung cấp một cặp số nguyên [x, y]. Bạn có thể thực hiện một trong hai hoạt động bên dưới, theo bất kỳ thứ tự nào, bằng không hoặc nhiều lần. 1. [x, y] -> [x+y, y] 2. [x, y] -> [x, y+x] Ví dụ: bạn có thể bắt đầu với [1, 4], thay đổi nó thành [5, 4], thay đổi điều đó thành [5, 9], sau đó thay đổi lại thành [5, 14]. Bạn được cho bốn số nguyên: a, b, c và d. Trả về Có Có Có [không có trích dẫn] nếu có thể bắt đầu với cặp [A, B] và kết thúc với cặp [C, D]. Nếu không, hãy trả lại không có.
2. [x,y] -> [x,y+x]
You are given four integers: a, b, c, and d. Return “Yes”
[without quotes] if it is possible to start with the pair [a, b] and end with the pair [c, d]. Otherwise, return “No”.
Chữ ký phương thức: chuỗi isitpossible [int a, int b, int c, int d]
Đầu vào bốn số nguyên trong các dòng riêng biệt.
Four integers in separate lines.
Đầu ra một chuỗi có thể có.
One string “Yes” or “No”.
Hạn chế
1≤ a, b, c, d ≤ 1000
Mẫu đầu vào 1 4 5 9
1
4
5
9
Đầu ra mẫu Có
Yes
Giải thích [1, 4] -> [5, 4] -> [5, 9].
[1, 4] -> [5, 4] -> [5, 9] .
Giải pháp trong Java
static LinkedList pairs = new LinkedList[]; public static String isItPossible[Integer a, Integer b, Integer c, Integer d]{ pairs.addLast[new Pair[a,b]]; while [!pairs.isEmpty[]]{ Pair pair = pairs.poll[]; Integer key = pair.getKey[]; Integer value = pair.getValue[]; if[key.equals[a] && value.equals[b]]{ return "YES"; } int sum=key+value; if [sum