Catch That Cow解题报告
2014-01-14 12:38
375 查看
B - Catch That Cow
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d
& %I64u
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.
这道题目突出一个心酸啊!!
通过BFS进行解决方案的搜索。用一个队列来储存中间数。
但是这个队列的大小很难把握,我开始以为10000算大了,显示RE错误,后来我对储存进行优化。
凡是访问过的统统不再加入队列中,已经在队列中的也不再加入队列,比结果还要大1以上的也不加入队列,果然大大减少了队列的数据,但是还是RUNTIME ERROR错误。
然后我改为100000,还是RE,最后一狠心改为1000000才不显示RE,反倒显示了Wrong Answer。我反复查看代码似乎没有问题。
原来我疏忽了一种N比K还要大的可能性。一旦N比K大的话,只有减一才能逐步到达K,所以步数就是N - K。
这是我的源代码:
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d
& %I64u
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.
这道题目突出一个心酸啊!!
通过BFS进行解决方案的搜索。用一个队列来储存中间数。
但是这个队列的大小很难把握,我开始以为10000算大了,显示RE错误,后来我对储存进行优化。
凡是访问过的统统不再加入队列中,已经在队列中的也不再加入队列,比结果还要大1以上的也不加入队列,果然大大减少了队列的数据,但是还是RUNTIME ERROR错误。
然后我改为100000,还是RE,最后一狠心改为1000000才不显示RE,反倒显示了Wrong Answer。我反复查看代码似乎没有问题。
原来我疏忽了一种N比K还要大的可能性。一旦N比K大的话,只有减一才能逐步到达K,所以步数就是N - K。
这是我的源代码:
//Catch That Cow #include <stdio.h> #define SIZE 1000000 long num[SIZE] = {0}; long step[SIZE] = {0}; int visited[SIZE] = {0}; long i,j; void add(long n); void main() { long n,k; scanf("%d %d",&n,&k); num[0] = n; i = 0; j = 1; if (n <= k) { while (num[i % SIZE] != k) { visited[num[i % SIZE]] = 1; if (!(num[i % SIZE] > k + 1 || num[i % SIZE] < 0)) { if (!visited[num[i % SIZE] + 1]) { add(num[i % SIZE] + 1); } if (!visited[num[i % SIZE] - 1]) { add(num[i % SIZE] - 1); } if (!visited[num[i % SIZE] * 2]) { add(num[i % SIZE] * 2); } } i ++; } printf("%d\n",step[i % SIZE]); } else { printf("%d\n",n - k); } } void add(long n) { num[j % SIZE] = n; visited = 1; step[j % SIZE] = step[i % SIZE] + 1; //printf("add %d step %d\n",n,step[j % SIZE]); j ++; }
相关文章推荐
- POJ-3278 Catch That Cow 解题报告
- POJ - 3278 Catch That Cow解题报告
- Pku acm 3278 Catch That Cow数据结构题目解题报告(五) ----树的BFS
- hdu 2717 Catch That Cow bfs搜索 解题报告
- POJ_3278 Catch That Cow 解题报告
- POJ3278 Catch That Cow 解题报告
- poj3278: Catch That Cow结题报告
- POJ 3278(Catch That Cow)解题纠错
- 简单广搜:Catch That Cow
- HDU2717 Catch That Cow(BFS)
- HDU 2717 Catch That Cow
- Kuangbin专题 - 简单搜索 -C - Catch That Cow
- Catch That Cow (BFS)
- poj 3278 Catch That Cow(bfs广搜)
- hdu 2717 Catch That Cow(广搜bfs)
- POJ 3278 - Catch That Cow(BFS)
- poj3278 Catch That Cow
- POJ3278——Catch That Cow
- poj 3278 Catch That Cow(简单的广搜+剪枝)
- POJ 3278 Catch That Cow