POJ 3278 Catch That Cow
来源:互联网 发布:淘宝消费人群年龄分布 编辑:程序博客网 时间:2024/06/16 10:19
Catch That Cow
Time Limit: 2000MS Memory Limit: 65536K
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
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
Time Limit: 2000MS Memory Limit: 65536K
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
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
题意:
给定两个整数n和k有n+1、n-1 、n*2, 3种操作使得n==k
输出最少的操作次数
关键在剪枝
#include <iostream>#include <cstdio>#include <queue>#include <cstring>using namespace std;int N , K ;int ans[100001] ; //记录步数void bfs( ) { queue <int> Q ; while(!Q.empty()) { Q.pop() ; } Q.push(N) ; while(!Q.empty()) { int init = Q.front() ; Q.pop() ; // +1 int temp = init + 1 ; if( temp == K ){ if(ans[temp]) ans[temp] = min(ans[init] + 1 , ans[temp]) ; else ans[temp] = ans[init] + 1 ; return ;} else if( temp <= 100000 && temp < K ) { // 步数小于K才加 if(!ans[temp]){ ans[temp] = ans[init] + 1 ; Q.push(temp) ; } } //-1 temp = init -1 ; if( temp == K ) { if(ans[temp]) ans[temp] = min(ans[init] + 1 , ans[temp]) ; else ans[temp] = ans[init] + 1 ; return ;} else if( temp >= 0 ) { //注意大于0 if(!ans[temp]){ ans[temp] = ans[init] + 1 ; Q.push(temp) ; } } //乘2 temp = init*2 ; if( temp == K ){if(ans[temp]) ans[temp] = min(ans[init] + 1 , ans[temp]) ; else ans[temp] = ans[init] + 1 ; return ;} else if( temp <= 100000 && temp < 2*K ) { //剪枝,若>=2K 无意义 if(!ans[temp]){ ans[temp] = ans[init] + 1 ; Q.push(temp) ; } } }}int main() { while(~scanf("%d%d",&N,&K)) { memset(ans,0,sizeof(ans)) ; if( N == K) { printf("0\n") ; continue ; } bfs() ; printf("%d\n",ans[K]) ; } return 0 ;}
0 0
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 catch that cow
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- Poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- POJ 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- poj 3278 Catch That Cow
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow
- POJ 3278 - Catch That Cow
- POJ 3278 Catch That Cow
- POJ 3278 Catch That Cow
- POJ-3278-Catch That Cow
- 关于android软键盘隐藏总结
- node-zk-browser环境搭建
- 我的地图二
- MCS 搜索 入门DFS 2015-07-26
- File和File的IO流
- POJ 3278 Catch That Cow
- (一〇三)静态库(.a)的调试
- eclipse 创建maven项目设置默认jdk版本
- mongodb实现简单的增删改查
- 图文浅析APK程序运行的过程
- Android开发之路--(2)--Android四大组件
- C/C++调用matlab
- java/oracle日期处理
- Bootstrap组件之警告框