洛谷这道题 AC 了,POJ 不知道为啥 WA 掉了:
https://vjudge.net/solution/39728026/origin
https://vjudge.net/solution/39728026
代码如下:
#include<iostream>
#include<bitset>
#include<vector>
#include<map>
#include<queue>
using namespace std;
long long n, k, ans;
bitset<100177> vis;
struct Nd
{
long long val;
int stp;
Nd(const long long & val, const int& stp): val(val), stp(stp) { }
Nd(): stp(0) { }
};
inline void bfs()
{
if(n >= k) return (ans=n-k, void());
vis.reset();
queue<Nd> Q;
Q.push(Nd(n, 0));
vis[n] = true;
while(!Q.empty())
{
Nd frn = Q.front(); Q.pop();
int stp = frn.stp;
if(frn.val == k)
{
ans = stp;
return ;
}
if(frn.val+1 <= k && !vis[frn.val+1])
{
vis[frn.val+1] = true;
Q.push(Nd(frn.val+1, stp+1));
}
if(frn.val-1 >= 1 && !vis[frn.val-1])
{
vis[frn.val-1] = true;
Q.push(Nd(frn.val-1, stp+1));
}
if((frn.val*2 <= k*3/2 || frn.val*2 < 100017) && !vis[frn.val*2])
{
vis[frn.val*2] = true;
Q.push(Nd(frn.val*2, stp+1));
}
}
}
signed main()
{
cin >> n >> k;
bfs();
cout << ans << endl;
return 0;
}
拍了好久也没拍出来哪里寄了。
(或者是 poj 的锅(?