Catch That Cow

    题目大意:FrammerJohn找奶牛,给出n和k。FJ在n处。每次他可以向左移动一格、向右移动一格或者移动到自己当前格子数乘2的地方。求FJ最少移动多少次。其中,FJ和Cow在数轴上。

    注释:$1<=n,k<=10^5$。

      想法:又是一道bfs裸题。就是通过简单的bfs来找寻最优解。其中,先遍历到的点在后面重新遍历时,所得到的步数一定是更劣的。所以,每个点我们只需要更新一次。我们通过f数组记录f[i]表示从n到i的最小步数。然后,我们可以不另开bool数组,只需要通过判断f数组是否有值即可。这里有一个小技巧,就是我们将f[n]=1,然后输出答案时输出f[k]-1.这样就可以避开n点的错误重新遍历的情况。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int n,k;
int f[200010];
inline void bfs()
{
queue<int>q;
int x;
q.push(n);
f[n]=1;//小技巧
while(!q.empty())
{
x=q.front();
q.pop();
if(x+1<=2*k&&!f[x+1])
{
f[x+1]=f[x]+1;
q.push(x+1);
}
if(x-1>=0/*这里非常重要,搜索中我们习惯在入队时就将不满足题意者去除,而不是在出队时特判*/&&!f[x-1])
{
f[x-1]=f[x]+1;
q.push(x-1);
}
if(x*2<=k*2&&!f[x*2])
{
f[x*2]=f[x]+1;
q.push(x*2);
}
}
return;
}
int main(void)
{
while(~scanf("%d%d",&n,&k))
{
memset(f,0,sizeof f);
bfs();
printf("%d\n",f[k]-1);
}
}

    小结:错误的点就是没有考虑到遍历时f数组小于零时的越界情况。在入队时处理而不是在出队时特判。

Catch That Cow_bfs的更多相关文章

  1. SQLServer如何添加try catch

    在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...

  2. try...catch..finally

    try..catch..finally try{ 代码块1 }catch(Exception e){ 代码块2 }finally{ 代码块3 } catch是抓取代码块1中的异常 代码块2是出异常后的 ...

  3. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  4. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  5. [c#基础]关于try...catch最常见的笔试题

    引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...

  6. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

    高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...

  7. try catch里面try catch嵌套

    try catch里能否内嵌try catch?答案是肯定的.但是等内层try catch出异常之后是个什么执行顺序呢?看下面代码 static void Main(string[] args) { ...

  8. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  9. java try(){}catch(){}自动资源释放

    从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Manag ...

随机推荐

  1. FusionCharts封装-Value

    Data.java: /** * @Title:Data.java * @Package:com.fusionchart.model * @Description:FusionCharts 封装dat ...

  2. 笔记本CPU低压和标压有什么区别?

    笔记本CPU英文称Mobile CPU(移动CPU),它除了追求性能,也追求低热量和低耗电,最早的笔记本电脑直接使用台式机的CPU,但是随CPU主频的提高, 笔记本电脑狭窄的空间不能迅速散发CPU产生 ...

  3. Java Web项目(Extjs)报错九

    1.Java Web项目(Extjs)报错九 具体报错如下: 三月 26, 2014 11:48:35 下午 org.hibernate.util.JDBCExceptionReporter logE ...

  4. javaWeb之邮箱发送(邮箱客户端配置)

    这里使用的是本机的邮箱服务器  , 代码执行条件: 1.·邮箱服务器  , 下载地址   密码   s4xn 邮箱服务器配置: 1):安装 2):打开服务器 红色部分是默认账号,不用处理 3)系统设置 ...

  5. 版本控制工具--svn和git的使用(一) -----版本控制的好处以及分类

    版本控制工具 版本控制VCS(Version Control Systems)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.这个系统可以自动帮我们备份文件的每一次更改,并且可以 ...

  6. Alice and Bob HDU - 4268

    Alice and Bob's game never ends. Today, they introduce a new game. In this game, both of them have N ...

  7. freemark声明变量,boolean,date,date日期格式转换成String类型的(五)

    <br/>assign用来定义变量<#assign name="刘德华"><br/> 获取assign定义变量的值:${name} <br ...

  8. Java虚拟机的锁优化

    1 锁偏向.当现成请求一个对象锁时,如果获得锁,则该对象锁进入偏向模式,当该线程再次请求该对象的锁时,无需再做任何同步操作. 可通过在Java虚拟机中开启参数-XX:+UseBasedLock开启偏向 ...

  9. 洛谷P1501 [国家集训队]Tree II(LCT,Splay)

    洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...

  10. 【BZOJ4650】【NOI2016】优秀的拆分(后缀数组)

    [BZOJ4650][NOI2016]优秀的拆分(后缀数组) 题面 BZOJ Uoj 题解 如果我们知道以某个位置为开始/结尾的\(AA\)串的个数 那就直接做一下乘法就好 这个怎么求? 枚举一个位置 ...