• 杭电Problem-2717


    Catch That Cow

    Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 10820    Accepted Submission(s): 3374


    Problem 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
    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.
     
    #include <cstdio>
    #include <queue>
    #include <cstring>
    using namespace std;
    struct node {
    	int x,step;
    }temp, p;
    bool vis[10000005];
    int d[2] = {1,-1};
    int bfs(int a, int b)
    {
    	memset(vis,false,sizeof(vis));
    	queue<node> q;
    	while (!q.empty())   q.pop();
    	p.x = a;
    	p.step = 0;
    	q.push(p);
    	vis[a] = true;
    	while (q.size()) {
    		p = q.front();
    		q.pop();
    		if(p.x == b)  return p.step;
    		for(int i = 0; i < 3; i++) {
    			if (i == 2)	 temp.x = p.x * 2;
    			else	temp.x = p.x + d[i];
    			if (temp.x < 0 || vis[temp.x] || temp.x>100000)	continue;
    			vis[temp.x] = true;
    			temp.step = p.step + 1;
    			q.push(temp);
    		}
    	}
    	return -1;
    }
    int main()
    {
    	int n, k;
    	while (scanf("%d %d", &n, &k) != EOF)
    	{
    		int ans = bfs(n,k);
    		printf("%d
    ", ans);
    	}
    	return 0;
    }



  • 相关阅读:
    模拟实现bind、call、apply函数
    模拟实现ECMAScript5新增的数组方法
    HBuilder mui页面间传值的几种方式
    手机端软键盘弹出挤压页面的问题
    js获取当前时间
    原生js根据class获取元素的方法
    jquery之获取select选中的值
    原生js获取元素属性值方法
    利用javascrit获取url传递的参数
    jQuery图片预加载(延迟加载)之插件Lazy Load
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770975.html
Copyright © 2020-2023  润新知