POJ 【3278】 Catch That Cow
2016-04-15 08:15
387 查看
Catch That Cow
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. Source USACO 2007 Open Silver |
/* *这道题有几个坑点需要注意,首先我们可以判断出负坐标是没有作用的 *判断数组需要开2倍大,第二数组处理过程中不能越界. */ #include <cstdio> #include <cstring> #include <iostream> #include <queue> using namespace std; const int maxn = 100005; int vis[2*maxn]; int n,k; struct Node { int x,t; Node(int a,int b):x(a),t(b){} Node(){} }; bool judge(int loc) { if(loc < 0 || loc >= 2*maxn) return false; return true; } void bfs() { queue <Node> que; while(!que.empty()) que.pop(); Node cur; memset(vis,0,sizeof(vis)); que.push(Node(n,0)); vis = 1; while(!que.empty()) { cur = que.front(); que.pop(); if(cur.x == k) { printf("%d\n",cur.t); return ; } if(judge(cur.x+1) && !vis[cur.x+1]) // 注意judge放在判断vis数组前面,否则会runtime error { vis[cur.x+1] = 1; que.push(Node(cur.x+1,cur.t+1)); } if(judge(cur.x-1) && !vis[cur.x-1]) { vis[cur.x-1] = 1; que.push(Node(cur.x-1,cur.t+1)); } if(judge(cur.x*2) && !vis[cur.x*2]) { vis[cur.x*2] = 1; que.push(Node(cur.x*2,cur.t+1)); } } } int main() { while(scanf("%d%d", &n, &k) != EOF) bfs(); return 0; }
相关文章推荐
- Android 基本控件的使用四(仿团购底部菜单App)(RadioGroup)
- mysql _error insert
- Hive中文注释乱码问题的解决
- UVa1585 习题3-1
- 通过修改注册表解决——任务管理器禁用问题
- python调用caffe模型进行classify时读入mean文件错误:mean shape incompatible with input shape
- STL迭代器失效问题
- 转: Apache SSI详解及应用
- jquery中prop()方法和attr()方法的区别浅析
- 【福昕PDF阅读器】当前文件兼容于PDFA且以不接受修改的只读模式打开
- strut获取作用对象的两种方式
- UVA_10074_Take the Land
- 面试记录五:腾讯后台研发
- Apache HTTP Server 2.4编译安装及其新特性(四)
- 队列-Implement Queue using Stacks(用栈实现队列)
- raw_input() 与 input() __ Python 的区别
- Linux基础(文件类型)
- 神经网络的收敛问题
- 计算最小公倍数LCM
- 面试记录四:腾讯后台研发问题大集锦