现在的位置: 首页 > 综合 > 正文

Catch That Cow(POJ 3278)

2015年11月22日 ⁄ 综合 ⁄ 共 1319字 ⁄ 字号 评论关闭

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 - 1 or + 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

Line 1: Two space-separated integers: N and K

Output

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

Sample Input

5 17

Sample Output

4

Hint

The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
注意数组要开大一些,否则会Runtime Error
#include<stdio.h>
#include<stack>
#include<queue>
#include<string.h>
using namespace std;
int state[200010];
int N,K;
int dir[3][2]={{1,-1},{1,1},{2,0}};
queue<int> record;
int BFS(){
    if(N==K) return 0;
    record.push(N);
    state[N]=1;
    while(!record.empty()){
        int cur,temp;
        cur=record.front();
        record.pop();
        for(int a=0;a<3;a++){
            temp=cur*dir[a][0]+dir[a][1];
            if(temp==K) return state[cur];
            if(temp>=0&&temp<200010){
                if(!state[temp]){
                    record.push(temp);
                    state[temp]=state[cur]+1;
                }
            }
        }
    }
}
int main(){
    memset(state,0,sizeof(state));
    cin>>N>>K;
    int step;
    step=BFS();
    cout<<step<<endl;
    return 0;
}


抱歉!评论已关闭.