Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 97240 | Accepted: 30519 |
Description
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Output
Sample Input
5 17
Sample Output
4
Hint
//#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<algorithm> #include<map> #include<queue> #include<stack> #include<set> #include<list> using namespace std; #define me0(x) memset(x,0,sizeof(x)) #define pb(x) push_back(x) #define ll long long const int Mod = 1e9+7; const int inf = 1e9; const int Max = 2e5+10; vector<int>vt[Max]; queue<int>q; int dx[] = {-1, 1, 0, 0}; int dy[] = { 0, 0, -1, 1}; //void exgcd(ll a,ll b,ll& d,ll& x,ll& y){if(!b){d=a;x=1;y=0;}else{exgcd(b,a%b,d,y,x);y-=x*(a/b);}} //ll inv(ll a,ll n){ll d, x, y;exgcd(a,n,d,x,y);return (x+n)%n;} ��Ԫ //int gcd(int a,int b) { return (b>0)?gcd(b,a%b):a; } ��С��Լ //int lcm(int a, int b) { return a*b/gcd(a, b); } ��С���� int cnt[Max]; bool vis[Max];void bfs(int l,int r) {q.push(l);vis[l] = 1;cnt[l] = 0;while(!q.empty()){int x = q.front();q.pop();if(x==r){cout<<cnt[r]<<endl;break;}if(x-1>=0&&!vis[x-1]){vis[x-1] = 1;q.push(x-1);cnt[x-1] = cnt[x] + 1;}if(x<=r&&!vis[x+1]){vis[x+1] = 1;q.push(x+1);cnt[x+1] = cnt[x] + 1;}if(x<=r&&!vis[x*2]){vis[x*2] = 1;q.push(x*2);cnt[x*2] = cnt[x] + 1;}} }int main() {int n,m;cin>>n>>m;me0(vis);bfs(n,m);return 0; }