• poj 3278 Catch That Cow


    Catch That Cow
    Time Limit: 2000MS Memory Limit: 65536K
    Total Submissions: 71890 Accepted: 22628
    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
    USACO 2007 Open Silver
    大致题意:
    给定两个整数n和k
    通过 n+1或n-1 或n*2 这3种操作,使得n==k
    输出最少的操作次数

    /*
    BFS状态扩展   
    {
        只要找到解就一定是最优的.
        同样这题我们也可以用DFS跑回溯(显然要爆T)
        其实迭代搜也能跑(还不会orz.) 
    } 
    */
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #define MAXN 1000001
    using namespace std;
    int n,k,s[MAXN];
    bool b[MAXN];
    queue<int>qq;
    int bfs()
    {
        qq.push(n);
        s[n]=0;
        b[n]=true;
        if(n>=k) return n-k;
        while(!qq.empty())
        {
            int x=qq.front(),y;
            qq.pop();
            for(int i=1;i<=3;i++)
            {
                if(i==1) y=x-1;
                if(i==2) y=x+1;
                if(i==3) y=x*2;
                if(y<0||y>MAXN) continue;
                if(!b[y])
                {
                    s[y]=s[x]+1;
                    b[y]=true;
                    qq.push(y);
                }
                if(y==k) return s[y];
            }
        }
    }
    int main()
    {
        cin>>n>>k;
        printf("%d",bfs());
        return 0;
    }
  • 相关阅读:
    python-深入学习
    python-第一天学习python
    JMeter-关联、添加压力机、linux下运行、抓包、手机抓包等学习
    python模块---常用模块2
    python模块---常用模块
    python函数--装饰器
    python函数--匿名函数,内置函数,闭包
    python函数--生成器,生成器表达式,列表推导式
    python函数--global,nonlocal ,新格式化输出,迭代器
    python函数--万能参数,形参,名称空间,嵌套,内置函数globals locals ,关键字nonlocal global
  • 原文地址:https://www.cnblogs.com/nancheng58/p/6070835.html
Copyright © 2020-2023  润新知