codevs 3060 抓住那头奶牛 x
2024-09-08 02:38:11
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
见题目
#include<cstdio>
#include<queue>
#define maxn 100001 using namespace std; int n,k;
bool v[maxn]; struct node
{
int pos,step;
}cur,nxt; queue<node>q;//该队列是为了储存结构体中的pos,以及step void Q_work()
{
cur.pos=n;
cur.step=;//进行初始化
q.push(cur);
v[n]=true;
if(n==k) //特判如果起点与重点是重合的
{
printf("");
return;
}
while(!q.empty())
{
cur=q.front();
q.pop();//取出队头元素,将其出队
nxt.step=cur.step+;//下一步一定是为当前的步数+1
for(int i=;i<=;i++)
{
switch(i)//枚举行走的三种情况
{
case : nxt.pos=cur.pos+; break;
case : nxt.pos=cur.pos-; break;
case : nxt.pos=cur.pos*; break;
}
if(nxt.pos>=&&nxt.pos<=&&!v[nxt.pos])
{//必须不超过边界并且当前并未走过
if(nxt.pos==k)
{
printf("%d",nxt.step);//如果==k则说明已经到达,则进行输出
return;
}
q.push(nxt);//将其入队
v[nxt.pos]=true;//并进行标记
}
}
}
} int main()
{
scanf("%d%d",&n,&k);
Q_work();
return ;
}
最新文章
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 2
- Django Admin 录入中文错误解决办法
- ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
- jquery中CheckBox的checked状态用attr()的问题
- 多边形裁剪的Sutherland-Hodgman算法
- Mono.Android 基础
- 设定自动获得DNS服务器地址
- 安卓第九天笔记-Activity
- java读取文件夹下所有文件并替换文件每一行中指定的字符串
- 洛谷P2725 邮票 Stamps
- jQuery对象与DOM对象
- android初学-togglebutton
- 2015北京网络赛 A题 The Cats&#39; Feeding Spots 暴力
- 树形dp练习
- SVN管理工具Cornerstone之:创建分支、提交合并
- thinkPHP 模板中的语法知识 详细介绍(十二)
- Android Spinner值不显示,选择列表正常
- 模块(module)
- Shell + crontab 实现日志压缩归档
- java:@SuppressWarnings注解