Language:
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 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 |
具体实现如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INF 0x7ffffff
#define N 100000 + 10
int Queue[N << 1], path[N];
void bfs(int n, int k)
{
int i, nx, now, rear = 0, front = 0;
int dx[] = { -1, 1 };
for (i = 0; i < N; i++)
path[i] = INF;
path[n] = 0;
Queue[rear++] = n;
while (front < rear)
{
now = Queue[front++];
if (now == k)
break;
for (i = 0; i < 3; i++)
{
if (i < 2)
nx = now + dx[i];
else
nx = now << 1;
if (nx >= 0 && nx < N && INF == path[nx])
{
path[nx] = path[now] + 1;
Queue[rear++] = nx;
}
}
}
printf("%d\n", path[k]);
}
void solve(int n, int k)
{
if (n > k)
{
printf("%d\n", n - k);
return;
}
memset(Queue, 0, sizeof(Queue));
memset(path, 0, sizeof(path));
bfs(n, k);
}
int main()
{
int n, k;
while (EOF != scanf("%d %d", &n, &k))
solve(n, k);
return 0;
}