51nod 1247 可能的路徑

2021-08-04 14:02:42 字數 903 閱讀 4212

逆向思維,先證明點p1可以到點p2,然後可以從p2返回p1。然後找一點m,如果點(a,b)可以到達m,並且點(x,y)也可以到大m,則(a,b)可以到達(x,y)

相關討論裡給的證明:

給個不太嚴謹的證明思路:

第一步:證明路徑可逆,也就是如果(a, b) -> (x, y)可行,則(x, y) - > (a, b)可行

這個比較直觀,只需要分別由(a +b, b) (a, a + b), (a - b, b), (a, a - b)推回(a, b)即可:

例如:(a, a - b) - > (b, a - b) - > (b, a) -> (a + b, a) - > (a + b, b) -> (a, b)

(a, a + b)->(2a + b, a + b) - > (2a + b, a)->(a + b, a) ->(a+b, b) ->(a, b)

注意這裡也順手說明了(a, b)->(b, a)可行

第二步:既然路徑可逆,那題目的可以這樣改寫:是否存在點(m, n)使得(a, b) -> (m, n)可行且,(x, y)->(m, n)可行

因為(a, b) -> (b, a)可行,則不失一般性,可假設:a > b

可以這樣逐次推導:(a, b) -> (a - b, b) -> (a - 2b, b)-> … ->(a - nb, b),其中, n = a / b, 則,改寫一下:

(a, b) - > (a % b, b) ->(b, a % b)

由此聯想到歐幾里得演算法求解最大公約數的過程,不用多說了。。。

#include 

using

namespace

std;

int main()

return

0;}

1247 可能的路徑

在乙個無限大的二維網格上,你站在 a,b 點上,下一步你可以移動到 a b,b a,a b a b,b 或者 a,a b 這4個點。給出起點座標 a,b 以及終點座標 x,y 問你能否從起點移動到終點。如果可以,輸出 yes 否則輸出 no 例如 1,1 到 2,3 1,1 2,1 2,3 收起第1...

51nod 1274 最長遞增路徑

1274 最長遞增路徑 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調...

51nod 2673 最短路徑

51nod 最短路徑 1.0 秒 131,072.0 kb 0 分基礎題 給出一張包含n個節點 m條邊的無向圖,請你求出圖上兩點s,t間的最短路徑長度。請大家自行處理重邊和自環 第一行兩個數n,m,分別表示節點數和邊數,以空格隔開,其中1 n 500,1 m 50000 之後m行,每行3個數u,v,...