POJ 3278-- Catch That Cow
2016-08-10 23:12
316 查看
题目:
Catch That Cow
Description
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
Sample Output
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.
题意:
FJ要抓牛,牛在k位置,FJ在n位置,假设牛是在原地不动的,FJ假设在X点,可以向X+1走一步,或者X-1走一步,或者2*X走一步,问最短路。
思路:
如果牛在FJ后面,那么FJ只能一步一步向后走,否则宽搜。
实现:
Catch That Cow
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 76114 | Accepted: 24036 |
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.
题意:
FJ要抓牛,牛在k位置,FJ在n位置,假设牛是在原地不动的,FJ假设在X点,可以向X+1走一步,或者X-1走一步,或者2*X走一步,问最短路。
思路:
如果牛在FJ后面,那么FJ只能一步一步向后走,否则宽搜。
实现:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <math.h> #include <queue> using namespace std; const int maxn = 100005; struct node { int nn, step; }; int _map[maxn];//记录到某一点的最短步数 int bfs (int n, int k) { queue <node>q; node head; head.nn = n; head.step = 0; _map[head.nn] = 0; q.push(head); while(!q.empty()) { node en; node start = q.front(); if (start.nn == k) return _map[k]; q.pop(); for (int i = 0; i < 3; i++) { if (i == 0 && start.nn + 1 <= maxn) { en.nn = start.nn + 1; en.step = start.step + 1; } else if (i == 1 && start.nn - 1 >= 0) { en.nn = start.nn - 1; en.step = start.step + 1; } else if (i == 2 && 2 * start.nn <= maxn) { en.nn = start.nn * 2; en.step = start.step + 1; } if (_map[en.nn] > start.step + 1) { _map[en.nn] = start.step + 1; q.push(en); } } } return -1; } int main() { int n, k; while (scanf("%d%d", &n, &k) != EOF) { for (int i = 0; i <= maxn; i++) { _map[i] = maxn + 5; } if (n >= k) printf("%d\n", n - k); else printf("%d\n", bfs(n, k)); } }
相关文章推荐
- SmartTemplate学习笔记
- 欢迎使用CSDN-markdown编辑器
- Oracle RAC环境的日志体系
- springAOP
- Eclipse安装git
- ajax运用效果图
- Java HashMap工作原理及实现?
- rewrite
- zz Java语法糖之泛型 - 综述
- MyEclipse2014的妙用-增加注释模板
- 邻接表的建立-两种方式(模板)
- 字符串匹配-KMP算法
- Mac PHPStorm快捷键总结
- java类里的成员变量是自身的对象问题
- Flex 布局教程:语法篇
- 我为什么要写LeetCode的博客?
- Use vimdiff as git mergetool
- MSP430实现简单的对临界资源的冲突访问
- My97DateTimePicker使用说明
- vim便捷命令:高亮搜索& 多行注释 和 取消多行注释