posts - 3,  comments - 1,  trackbacks - 0
学会了队列.这道题的主要思想:

5先入列   把5出列  5 可以变成 4 ,6 , 10, ,把得到的数入列,然后再出列分别处理..如果前面出现过就不入列..定义一个计数数组,然后number[y - 1] = number[y] + 1;  number[y + 1] = number[y] + 1; number[y * 2] = number[y] + 1;

Catch That Cow
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 8341 Accepted: 2476

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.




Source Code

Problem: 3278 User: luoguangyao
Memory: 1048K Time: 110MS
Language: C++ Result: Accepted
  • Source Code
    #include <iostream>
        #include <queue>
        using namespace::std;
        int number[100001] = {0};
        bool num[100001] = {0};
        int main()
        {
        queue<int> x;
        int a;
        int b;
        scanf("%d%d",&a,&b);
        int count = 0;
        number[a] = 0;
        x.push(a);
        while (x.size())
        {
        int y = x.front();
        x.pop();
        num[y] = 1;
        if (y == b)
        {
        break;
        }
        else
        {
        if (y - 1 >= 0)
        {
        if (!num[y - 1])
        {
        x.push(y - 1);
        number[y - 1] = number[y] + 1;
        num[y - 1] = 1;
        }
        }
        if (y + 1 <= 100000)
        {
        if (!num[y + 1])
        {
        x.push(y + 1);
        number[y + 1] = number[y] + 1;
        num[y + 1] = 1;
        }
        }
        if (y * 2 <= 100000)
        {
        if (!num[y * 2])
        {
        x.push(y * 2);
        number[y * 2] = number[y] + 1;
        num[y * 2] = 1;
        }
        }
        }
        }
        cout << number[b] << endl;
        return 0;
        }
posted on 2009-03-07 18:33 生活要低调 阅读(1411) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2020年3月>
23242526272829
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜