您的位置:首页 > 运维架构

openjudge 2971:抓住那头牛 解题报告

2016-09-23 10:46 344 查看
总时间限制:

2000ms

内存限制:
65536kB

描述

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:

1、从X移动到X-1或X+1,每次移动花费一分钟。
2、从X移动到2*X,每次移动花费一分钟。
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?

输入

两个整数,N和K

输出

一个整数,农夫抓到牛所要花费的最小分钟数

样例输入

5 17

样例输出4这道题就是一道水题。但是。它非常的坑。总结一下BFS就是1,数组开够。2,牛和老夫的方向判断。3,重复入队的判断。4,超界的判断。5,人品好。 这是关键。hhh贴出代码。这个代码就非常简单了。

#include<cstdio>
#include<algorithm>
using namespace std;
int x,y;
struct node
{
int x,times;
};
node q[3000010];
int visit[1000010];
int heads=1,last=1;
int main()
{
scanf("%d%d",&x,&y);
if(y<x)
{
  printf("%d",x-y);
  return 0;
}
node a;
a.x=x;a.times=0;
q[heads]=a;
while(heads<=last)
{
  node n=q[heads];
  heads++;
  if(n.x==y)
  {
  printf("%d",n.times);
  break;
  }
  node n1=n;
   n1.times++;
   n1.x+=1;
  if(!visit[n1.x])q[++last]=n1 , visit[n1.x]=1;
  n1.x-=2;
  if(!visit[n1.x])q[++last]=n1 , visit[n1.x]=1;
  n1.x+=1;
  n1.x*=2;
  if(n1.x<=100000&&!visit[n1.x])q[++last]=n1 , visit[n1.x]=1;
}
return 0;
}



简直尴尬。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: