这个题可把我坑惨了。
HDU和POJ的输入格式不一样
POJ是只输入一行
HDU是输入多行。
所以导致了在POJ AC的题到了HDU就变成了WA。。。。
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
Output
Sample Input
5 17
Sample Output
4
#include<iostream> #include<queue> #include<cstring> using namespace std; int n, k; struct localx { int local; int step; }now, tnext; int vis[1000010] = { 0 };int bfs() { queue<struct localx>q; now.local = n; now.step = 0; q.push(now); vis[n] = 1; while (!q.empty()) { now = q.front(); q.pop(); if (now.local == k) { return now.step; }if (now.local >= 0 && now.local<k) {//+1tnext.local = now.local + 1; tnext.step = now.step + 1; if (!vis[tnext.local]) { vis[tnext.local] = 1; q.push(tnext);}//-1 tnext.local = now.local - 1; tnext.step = now.step + 1; if (!vis[tnext.local]) { vis[tnext.local] = 1; q.push(tnext);}//*2tnext.local = now.local * 2; tnext.step = now.step + 1; if (!vis[tnext.local]) { vis[tnext.local] = 1; q.push(tnext);} } if (now.local>k&&now.local <= 100000) { tnext.local = now.local - 1; tnext.step = now.step + 1;q.push(tnext); }}} int main() { //cin >> n >> k; //int sum = bfs(); //cout << sum << endl;while (scanf("%d%d", &n, &k)!=EOF) { memset(vis,0, sizeof(vis)); int sum = bfs(); printf("%d\n", sum); } return 0; }