G - Catch That Cow
2017-01-19 21:45
337 查看
Farmer John has been informed of the location of a fugitive cow and
wants to catch her immediately. He starts at a point N (0 ≤ N ≤
100,000) on a number line and the cow is at a point K (0 ≤ K ≤
100,000) on the same number line. Farmer John has two modes of
transportation: walking and teleporting.
Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long
does it take for Farmer John to retrieve it?
Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John
to catch the fugitive cow.
Sample Input
5 17
Sample Output
4
Hint
The fastest way for Farmer John to reach the fugitive cow is to move
along the following path: 5-10-9-18-17, which takes 4 minutes.
题目讲让你用广搜
需要注意特殊情况,当famer 和cow在一起时
|
wants to catch her immediately. He starts at a point N (0 ≤ N ≤
100,000) on a number line and the cow is at a point K (0 ≤ K ≤
100,000) on the same number line. Farmer John has two modes of
transportation: walking and teleporting.
Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long
does it take for Farmer John to retrieve it?
Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John
to catch the fugitive cow.
Sample Input
5 17
Sample Output
4
Hint
The fastest way for Farmer John to reach the fugitive cow is to move
along the following path: 5-10-9-18-17, which takes 4 minutes.
题目讲让你用广搜
需要注意特殊情况,当famer 和cow在一起时
|
#include <iostream> #include <queue> #include <string.h> using namespace std; bool vis[100002]; int N, K, step; int dir[2] = {1, -1}; int path[100002]; queue <int> Q; void bfs(){ while(!Q.empty()){ int now = Q.front(); Q.pop(); for(int i = 0; i < 3; i++){ //将走的方式看作是一种方向,那么题目就可以转变为BFS int tt; if(i == 2){ tt = now * 2; } else{ tt = now + dir[i]; } if(tt > 0 && tt < 100001 && !vis[tt]){ //判断方式很简单,只要是在图的范围内并且没有访问过就可以了 if(tt == K){ cout << path[now]+1 << endl; return; } vis[tt] = true; path[tt] = path[now] + 1; //这里用来记录步数,走到第i个点用论文path[i]步,那么从i到下一个点就用了path[i]+1步 Q.push(tt); } } } } int main(){ ios::sync_with_stdio(false); memset(path, 0, sizeof(path)); memset(vis, false, sizeof(vis)); cin >> N >> K; if(N >= K){ //当cow的位置比john小时候,john只有向后退才会离cow越来越近,只有-1的方式能用,所以直接相减就行了。 cout << N - K << endl; } else{ Q.push(N); vis = true; bfs(); } }
相关文章推荐
- 浅析时钟向量算法
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 本人即将筹备败家日志,敬请期待!
- 书评:《算法之美( Algorithms to Live By )》
- IE:使用搜索助手
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- 在SQL Server 2005所有表中搜索某个指定列的方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码
- Android数据加密之异或加密算法的实现方法