zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    oc基础第二天类与对象---1复习代码
    oc基础第二天类与对象---1复习
    oc基础第一天---类的方法,类与对象
    oc基础第一天---类与对象
    oc基础第一天---面向过程与面向对象
    oc基础第一天---c语言和oc语言的对比
    oc基础第一天---c语言与oc语言对比
    第一阶段c语言结晶说明
    mvc 使用json.net 替换JsonResult 默认序列化
    Mvc ModelBinder 一对多自定义数据格式 post提交
  • 原文地址:https://www.cnblogs.com/nancheng58/p/6070835.html
Copyright © 2011-2022 走看看