poj 3278 catch the cow
2016-04-05 23:25
387 查看
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.
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.
///数据都过了 runtime error 呢 只能先贴上 明天再解决了 #include <iostream> #include<cstring> #include<queue> const int maxn = 100000;///要注意数据范围呀 struct node { int x; int t; }; node S,T; node New,now; bool vis[maxn+2]; int pos[maxn+2]; using namespace std; int bfs() { memset(vis,false,sizeof(vis)); queue<node>q; q.push(S); vis[S.x] = true; while(!q.empty()) { now = q.front(); q.pop(); New.x = now.x + 1;///************ New.t = now.t + 1;这部分这样写也不对,因为这是并列的三种情况呀 vis[New.x] = true; q.push(New); if(New.x == T.x) return New.t; New.x = now.x - 1; New.t = now.t + 1; vis[New.x] = true; q.push(New); if(New.x == T.x) return New.t; New.x = now.x * 2; New.t = now.t + 1; vis[New.x] = true; q.push(New); if(New.x == T.x) return New.t;///*************** } return -1;///这里是不能return -1的,因为至少走0步呀 } int main() { int start, ending; cin >> start >> ending; S.x = start; S.t = 0; T.x = ending;///要清空队列 int ans = bfs();///万一start >=ending 呢 if(ans > 0) cout << ans << endl; return 0; }
继续解决昨天的问题
上面的解法是不对的
修改如上:
漏洞好多
<pre name="code" class="cpp"> #include <iostream> #include<cstring> #include<queue> using namespace std; struct node { int x; int t; }; int start, ending; node S,T; node New,now; const int maxn = 200000; bool vis[maxn+2]; int pos[maxn+2]; queue<node>q; int bfs() { memset(vis,false,sizeof(vis)); q.push(S); vis[S.x] = true; while(!q.empty()) { now = q.front(); q.pop(); /*for(int i=0; i<3; i++) { if(i==0) { New.x = now.x + 1; } else if(i==1) { New.x = now.x - 1; } else { New.x = now.x * 2; } New.t = now.t + 1; if(New.x >=maxn ||New.x <0 || vis[New.x]) continue; vis[New.x] = true; q.push(New); if(New.x == T.x) return New.t; }*/ } return 0; } int main() { while(cin >> start >> ending) { S.x = start; S.t = 0; T.x = ending; while(!q.empty()) q.pop(); if(start >= ending) cout << start - ending << endl; else { int ans = bfs(); if(ans > 0) cout << ans << endl; } } return 0; }酱紫~~ 就完美了
相关文章推荐
- Duplicate files copied in APK META-INF/notice.txt错误的解决办法
- iOS 画音频波形曲线 根据音频数据版
- type()
- H3C汇聚层交换机认证在线人数展示系统之需求说明和功能点说明
- stm32小小中断学习
- Java Servlet Development Without Eclipse
- eclipse中新建Java工程的三个JRE选项区别
- HDU 5657 CA Loves Math 状压DP + 枚举
- Android屏幕适配
- Xcode7.3更新后插件失效的解决方法
- Vulkan Instance
- swift基本语法(总结提炼版)之012 swift 之闭包
- 关于new Function使用以及将json格式字符串转化为json对象方法介绍
- Javase 笔记知识点概要
- POJ3613 Cow Relays
- 我的python书写约定
- 第48课 函数设计原则(完)
- RxJava-过滤操作符
- hdu-1078 FatMouse and Cheese
- C#Base64编码