zoukankan      html  css  js  c++  java
  • A广搜

    <span style="color:#330099;">/*
    A - 广搜 基础
    Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
    Submit
     
    Status
    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.
    By Grant Yuan
    2014.7.13
    */
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<cstdio>
    using namespace std;
    bool a[100003];
    typedef struct{
       int num;
       int sum;
    }dd;
    queue<dd>q;
    int n,k;
    int res;
    void slove()
    {int m,count;
       int x;
       dd init;
       while(!q.empty()){
    
           if(q.front().num==n)
           {  res=q.front().sum;
               break;
           }
    
        m=q.front().num;
        count=q.front().sum;
       x=m-1;
       if(a[x]==0)
         {   init.num=x;
             init.sum=count+1;
             q.push(init);
             a[x]=1;
         }
    
        x=m+1;
         if(a[x]==0)
         {
            init.num=x;
             init.sum=count+1;
             q.push(init);
             a[x]=1;
    
         }
    
         if(m%2==0){
             x=m/2;
          if(a[x]==0)
         {
             init.num=x;
             init.sum=count+1;
             q.push(init);
             a[x]=1;
         }}
         q.pop();}
    }
    
    int main()
    {
           scanf("%d%d",&n,&k);
        memset(a,0,sizeof(a));
        dd init;
        init.num=k;
        init.sum=0;
        a[k]=1;
        q.push(init);
        slove();
        cout<<res<<endl;
        return 0;
    }
    
    </span>

查看全文
  • 相关阅读:
    python各种类型转换-int,str,char,float,ord,hex,oct等
    pandas快速入门
    python里面,将多个list列表合并成一个list列表
    对字符串进行切分的技巧
    Ubuntu 16.04 安装navicat (tar.gz)
    ubuntu 16.04 如何升级系统的scrapy旧版本(1.0.3)到最新版本
    ubuntu下,敲命令scrapy出现:0: UserWarning: You do not have a working installation of the service_identity module: 'cannot import name 'opentype''. Please install it from <https://pypi.python.org/pypi/servic
    Ubuntu下解压缩zip,tar,tar.gz,tar.bz2格式的文件
    简单的查看进程信息
    python正则表达式
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10953763.html
  • Copyright © 2011-2022 走看看