zoukankan      html  css  js  c++  java
  • codevs 3060 抓住那头奶牛 x

    3060 抓住那头奶牛

     

    USACO

     时间限制: 1 s
     空间限制: 16000 KB
     题目等级 : 黄金 Gold
     
    题目描述 Description

    农夫约翰被告知一头逃跑奶牛的位置,想要立即抓住它,他开始在数轴的N 点(0≤N≤100000),奶牛在同一个数轴的K 点(0≤K≤100000)。

    约翰有两种移动方式:1 分钟内从x 点移动到x+1 或x-1;1 分钟内从x 点移动到2x。假设奶牛不会移动,约翰抓住它需要多少时间?

    输入描述 Input Description

    一行两个整数N 和K,用空格隔开。

    输出描述 Output Description

    约翰抓住它需要的最少时间

    样例输入 Sample Input

    5 17

    样例输出 Sample Output

    4

    数据范围及提示 Data Size & Hint

    见题目

    分类标签 Tags 点此展开 

     
     
    这道题的难点是你需要处理三种方向。我是直接进行枚举的
     
    如下:
     
     1 #include<cstdio>
     2 #include<queue>
     3 #define maxn 100001
     4 
     5 using namespace std;
     6 
     7 int n,k;
     8 bool v[maxn];
     9 
    10 struct node
    11 {
    12     int pos,step;
    13 }cur,nxt;
    14 
    15 queue<node>q;//该队列是为了储存结构体中的pos,以及step 
    16 
    17 void Q_work()
    18 {
    19     cur.pos=n;
    20     cur.step=0;//进行初始化 
    21     q.push(cur);
    22     v[n]=true;
    23     if(n==k) //特判如果起点与重点是重合的 
    24     {
    25         printf("0");
    26         return;
    27     }
    28     while(!q.empty())
    29     {
    30         cur=q.front();
    31         q.pop();//取出队头元素,将其出队 
    32         nxt.step=cur.step+1;//下一步一定是为当前的步数+1 
    33         for(int i=1;i<=3;i++)
    34          {
    35              switch(i)//枚举行走的三种情况 
    36              {
    37                 case 1 : nxt.pos=cur.pos+1; break;
    38                 case 2 : nxt.pos=cur.pos-1; break;
    39                 case 3 : nxt.pos=cur.pos*2; break;
    40              }
    41              if(nxt.pos>=0&&nxt.pos<=100000&&!v[nxt.pos]) 
    42              {//必须不超过边界并且当前并未走过
    43                 if(nxt.pos==k)
    44                 {
    45                     printf("%d",nxt.step);//如果==k则说明已经到达,则进行输出 
    46                     return;
    47                 }
    48                 q.push(nxt);//将其入队 
    49                 v[nxt.pos]=true;//并进行标记 
    50             }
    51          }
    52     }
    53 }
    54 
    55 int main()
    56 {
    57     scanf("%d%d",&n,&k);
    58     Q_work();
    59     return 0;
    60 }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    react深入学习(资料,案例)
    match.exec深入学习
    实用插件表格行列隐藏显示
    下拉选项插件的实现
    表格操作eventTable
    [CentOS7] 挂载iso镜像文件到/media目录下
    [CentOS7] 设置开机启动方式(图形界面或命令行)
    [CentOS7] 磁盘分区(gdisk, fdisk)
    [CentOS7] minimal安装后 出现 没有ifconfig 无法ping 无法yum could not retrieve mirrorlist http://mirrorlist.centos.org/
    [C++]C,C++中使用可变参数
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6764820.html
Copyright © 2011-2022 走看看