本題抽象一下就是從乙個點出發,然後經過座標x2或+1或-1到另乙個點。顯然這就是乙個搜尋題,而且顯然可以看出步數最多就是兩個點座標之差。但是資料範圍105,直接暴搜肯定要麼mle要麼tle,肯定不行,一定要加上優化。
我們注意到座標的範圍是(0,105],那麼如果乙個點擴充套件到了這個範圍之外顯然就不可能得到解了,因此直接剪枝。同時我們用bfs搜尋,顯然第一次搜到某個點那一定是到這個點的最少步數,之後再到達這個點就沒必要再搜一遍了,有些記憶化的思想。
所以最後一頓剪枝操作就可以通過本題了,模擬的時候就因為剪枝條件少了乙個導致mleqwq。
#include#include#include
#include
#include
using
namespace
std;
int d[100010
];bool check(int
x)int
s,t;
struct
qwqtop;
void
bfs()
); d[s] = 1
;
while
(q.size())
);d[top.x + 1] = top.step + 1
; }
if(check(top.x - 1
)) );
d[top.x - 1] = top.step + 1
; }
if(check(top.x << 1
)) );
d[top.x
<< 1] = top.step + 1
; }
}}int
main()
return0;
}
luogu1588 丟失的牛
時空限制 1000ms 128mb fj丟失了他的一頭牛,他決定追回他的牛。已知fj和牛在一條直線上,初始位置分別為x和y,假定牛在原地不動。fj的行走方式很特別 他每一次可以前進一步 後退一步或者直接走到2 x的位置。計算他至少需要幾步追上他的牛。輸入格式 第一行為乙個整數t 10 表示資料組數 ...
洛谷 P1588 丟失的牛
傳送門 洛谷 p1588 丟失的牛 懶得再解釋了,簡單bfs,下面是蒟蒻 include 萬能頭 using namespace std int i,j,k,m,n,f 200005 queue q 佇列 int main for i 0 i m 2 i 避免 2後的 f i 1 記錄沒有到達過 q...
P1588 丟失的牛 AC於2018 9 16
fj丟失了他的一頭牛,他決定追回他的牛。已知fj和牛在一條直線上,初始位置分別為x和y,假定牛在原地不動。fj的行走方式很特別 他每一次可以前進一步 後退一步或者直接走到2 x的位置。計算他至少需要幾步追上他的牛。輸入格式 第一行為乙個整數t 10 表示資料組數 接下來每行包含乙個兩個正整數x和y ...