nflsoj 1351 抓住奶牛
这题类似走迷宫,走迷宫是向四个方向进行拓展,而这道题好比是向三个方向拓展,分别是:\(x+1,x-1,x×2\)
在这里拓展的时候我写了一个函数 operation 来计算拓展后的坐标
这里判断坐标是否合法的时候我取了最大值的两倍加5,因为坐标不一定在 \(k\) 的左边,有可能超出去了再往回走,不过超出一次就行了,再超就没有意义了,那样往回走的步数更多
每个点记录两个东西,坐标以及是第几个拓展到的(时间)
注意:数组d是用来记录第几个拓展到的,所以初始化的时候是 d[n]=0;,把 \(n\) 当作是第0层往外拓展
最后返回 d[k] 就搞定了
#include <iostream>
#include <cstring>
using namespace std;
const int N = 100005;
typedef pair<int,int> PII; //当前位置及已经走了多少步
PII q[N];
int d[N];
int n,k;
int operation(int x,int i)
{
if(i==0) return x+1;
if(i==1) return x-1;
if(i==2) return x*2;
}
int bfs()
{
int hh=0,tt=0;
q[0]={n,0};
memset(d,-1,sizeof d);
d[n]=0;
while(hh<=tt)
{
PII t=q[hh++];
for(int i=0;i<3;i++)
{
int x=operation(t.first,i);
if(x>=0&&x<=200005&&d[x]==-1)
{
d[x]=d[t.first]+1;
q[++tt]={x,t.second+1};
}
}
}
return d[k];
}
int main()
{
cin>>n>>k;
cout<<bfs();
return 0;
}
nflsoj 1351 抓住奶牛的更多相关文章
- poj 3278 简单BFS
题意:给定农夫和奶牛的初始位置,农夫可以当前位置+1.-1.*2三种移动方式,问最少需要多少分钟抓住奶牛 AC代码: #include<cstdio> #include<cstrin ...
- hdu 2717 Catch That Cow(广搜bfs)
题目链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 Catch That Cow Time Limit: 5000/2000 MS (Java/Others) ...
- 双向广搜 codevs 3060 抓住那头奶牛
codevs 3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛 ...
- 3060 抓住那头奶牛 USACO
3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛的位置,想要立即抓住它, ...
- codevs 3060 抓住那头奶牛 x
3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛的位置,想要立 ...
- BZOJ1646: [Usaco2007 Open]Catch That Cow 抓住那只牛
1646: [Usaco2007 Open]Catch That Cow 抓住那只牛 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 634 Solved ...
- 2014.6.14模拟赛【bzoj1646】[Usaco2007 Open]Catch That Cow 抓住那只牛
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- BZOJ 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛( BFS )
BFS... -------------------------------------------------------------------------------------------- ...
- 【BZOJ】1646: [Usaco2007 Open]Catch That Cow 抓住那只牛(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1646 这一题开始想到的是dfs啊,,但是本机测样例都已经re了... 那么考虑bfs...很巧妙? ...
- 【题解】[Usaco2007 Open]Catch That Cow 抓住那只牛-C++
题目DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her ...
随机推荐
- golang调用sdl2,播放pcm音频,报错signal arrived during external code execution。
golang调用sdl2,播放pcm音频,报错signal arrived during external code execution. win10 x64下测试成功,其他操作系统下不保证成功. 采 ...
- pages.json 文件:globalStyle 全局配置
globalStyle 用于设置应用的状态栏.导航条.标题.窗口背景色等. 属性 类型 默认值 描述 平台差异说明 navigationBarBackgroundColor HexColor #F7F ...
- flutter填坑之旅(flutter页面生命周期篇)
一.初始化时期 1.createState ///构建一个StatefulWidget时,会立即调用该方法(必须重写) @override _WidgetLifecycleState createSt ...
- Dapr在Java中的实践 之 环境准备
Dapr简介 Dapr (Distributed Application Runtime)是一个可移植的.事件驱动的运行时,它使任何开发人员都可以轻松地构建运行在云和边缘上的弹性.无状态和有状态的应用 ...
- 汇总低效的SQL语句
背景 SQL专家云像"摄像头"一样,对环境.参数配置.服务器性能指标.活动会话.慢语句.磁盘空间.数据库文件.索引.作业.日志等几十个运行指标进行不同频率的实时采集,保存到SQL专 ...
- 关于int**在malloc为二维数组分配空间时候的作用见解
关于int**在用malloc函数为二维数组分配空间时候 int** 二级指针类型 二维数组的数组名为行指针,写成 arr =(char**)malloc(n*sizeof(char))时,a ...
- Cronjob 定时任务
Job: 负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束. CronJob: 则就是在Job上加上了时间调度. 我们用Job这个资源对象来创建一个任务,我们定一个Job来 ...
- R数据分析:解决科研中的“可重复危机”,理解Rmarkdown
不知道刚接触科研的大伙儿有没有这么一个感觉,别人的研究很大可能你重复不出来,尤其是社科实证研究,到现在我都还觉得所谓的实证是个很玄乎的东西: 如果是刚开始做数据分析,很多时候你会发现自己的分析结果过几 ...
- 基于C语言的泛类型循环队列
循环队列多用于通信数据缓存中,尤其是在双方设备接收数据与处理数据不同步的情况下,使用循环队列先缓存通信数据,然后按照时间戳数据出队作出相应的处理,是一种比较合适的做法,在嵌入式编程中亦是如此.使用循环 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-4-playwright等待浅析
1.简介 在介绍selenium的时候,宏哥也介绍过等待,是因为在某些元素出现后,才可以进行操作.有时候我们自己忘记添加等待时间后,查了半天代码确定就是没有问题,奇怪的就是获取不到元素.然后搞了好久, ...