description
農民john剛剛獲悉一頭逃跑的牛的位置,打算立刻就去把它抓回來。john和牛都站在一條直線上,開始時john位於座標點n上( 0 ≤ n ≤ 100,000 ),牛位於座標點k上( 0 ≤ k ≤ 100,000 )。john有兩種行動方式:步行和瞬移(這種技能不是一般群眾具備的)。
步行:john花一分鐘由任意點x移動到點x-1或點x+1。
瞬移:john花一分鐘由任意點x移動到點2*x。
假設牛不知道john來抓它,一直站在原地吃草。問john最少需要花多少分鐘才能抓到它?
input
有多個測試用例,每個用例一行,有兩個整數:n和k,用空格分隔。最後一行是兩個 -1,不用處理。
output
為每個用例輸出乙個整數(單獨佔一行):john抓住逃跑的牛最少需要的時間,以分鐘算。
sample input
5 17
-1 -1
sample output
4
source
usaco 2007 open silver
#include //如果不用c++輸入則呼叫#include與#includeusing namespace std;
#define max 100006
int main()
{ int n,k;
int a,b,que[max],time[max],head,tail;
/*time陣列(用於存放到達結點(即座標)的時間),乙個佇列(queue)及隊頭(head)隊尾(tail)*/
int visited[max];
while(cin>>n>>k)
{if(n<0||k<0) break;
time[k]=-1;///假設到達牛所在座標的時間為-1(即結點k的值為-1)
memset(visited,0,sizeof(visited));///將所有座標點的入隊狀態用0標記,表示未入隊
visited[n]=1,time[n]=0;
que[0]=n,head=0,tail=1;//將n插入佇列,此時隊頭的值為0,隊尾的值為1
while(head=0&&a+1=0&&a-1=0&&2*a
抓住那頭牛(廣搜)
描述 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要...
抓住那頭牛(BFS廣搜)
描述 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要...
POJ 3278 抓牛(廣搜)
題意 john和它的牛在一天直線上,joh每次可以向前走一步或者向後走一步或者跳到當前位置的2倍位置上,求john在最少的時間裡抓到那牛。輸入 john當前位置和牛所在的位置。輸出 john花的最少時間。分析 可以將問題轉化為從乙個點到另乙個點的最少步數,這裡可以用廣搜去做,首先將當前john的位置...