/*
WA了12发简直不能忍! 。 题意非常简单。从正整数a变为b有三种方法:
+1,-1。*2 特殊情况一:a与b相等不须要搜索
特殊情况二:a>b时。结果必定是a-b不需搜
特殊情况三:比較坑! 。! 当 a 与 b 区别较大的时候。若一直依照三种方法产生子节点的话,
不断不断不断不断不断*2*2*2*2*2是非常easy超过数组长度的
并且当不断*2超过k之后,再次产生的新节点并没有意义。所以产生*2类型的新节点时要加推断条件 希望自己可以长记性
大家也能一起加油
*/ #include <iostream>
#include <cstdio>
#include <string>
using namespace std; #define MAXN 200000 int main()
{
int que[MAXN];
int book[MAXN];
int i,j,k,m,n,head,tail,new_pos;
while(cin>>n>>k)
{
memset(book,0,sizeof(book));
if (n==k)
{
printf("0\n");
continue;
}
if (n>k)
{
printf("%d\n",n-k);
continue;
}
head=tail=1;
que[head]=n;
while(!book[k]&&head<=tail)
{
new_pos=que[head]+1;
if (!book[new_pos])
que[++tail]=new_pos,book[new_pos]=book[que[head]]+1;
new_pos=que[head]-1;
if (!book[new_pos])
que[++tail]=new_pos,book[new_pos]=book[que[head]]+1;
new_pos=que[head]*2;
if (!book[new_pos]&&new_pos<=2*k)//这句话的后半句是精髓,试了非常多非常多次。
que[++tail]=new_pos,book[new_pos]=book[que[head]]+1;
head++;
}
cout<<book[k]<<endl;
}
return 0;
}

HDU2717BFS的更多相关文章

随机推荐

  1. python ——面向对象进阶(反射,双下线方法,静态方法,类方法)

    属性 如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种. 哎,其实就是这样,我们看一下当我们想查看税后工资的时候,这其实是一个人的属性,但是它却 ...

  2. [转帖]Android平台下OpenGL初步

    原文请看 Android平台下OpenGL初步 本文只关注于如何一步步实现在Android平台下运用OpenGl. 1.GLSurfaceView GLSurfaceView是Android应用程序中 ...

  3. C#中一道关于线程同步的练习题——模拟多窗口售票

    题目:模拟窗口卖票,四个窗口同时对外开放售票,需要按顺序售出. 要求:输出每一张票的售出时间和售出窗口,不能出现票未售出或者被售出多次的情况. using System; using System.C ...

  4. QQ自动发送+@好友功能+tencent://功能

    1.取出全部标题 D2007版本 procedure TForm1.Button1Click(Sender: TObject);var  hCurrentWindow:HWnd;  szText: a ...

  5. C++中冒号和双冒号的用法

    1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; X ...

  6. 一款纯css3实现的超炫动画背画特效

    之前为大家介绍了很多款由纯css3实现的特效.今天要再给大家带来一款纯css3实现的超炫动画背画特效.代码非常简单,没有引用任何其它js代码.css代码也不多.效果非常炫.一起看下效果图: 在线预览  ...

  7. spark与flume整合

    spark-streaming与flume整合  push package cn.my.sparkStream import org.apache.spark.SparkConf import org ...

  8. linux信号程序编译遇到的问题

    如果把这个去掉-std=c99就会运行通过 还有一点就是 for(int i=0;i<n;i++) 在循环里声明变量仅被用在c99里面.也就是要想在循环里面声明变量,就必须使用-std=c99

  9. openwrt内核配置选项添加

    摘自:http://blog.csdn.net/weiniliuchao/article/details/50295527 增加内核配置选项 openwrt的.config文件中,关于内核的选项都是形 ...

  10. linux挂载根文件系统过程

    linux-2.6.36内核 start       arch/arm/boot/compressed/head.S arch/arm/kernel/head.S start_kernel()    ...