题目:
NOI 2971 抓住那头牛
- 总时间限制:
- 2000ms
- 内存限制:
- 65536kB
- 描述
-
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛? - 输入
- 两个整数,N和K
- 输出
- 一个整数,农夫抓到牛所要花费的最小分钟数
- 样例输入
-
5 17
- 样例输出
- 4
- 代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 using namespace std; 5 bool visit[100001]; 6 struct node{ 7 int x,temp; 8 }nxt,cur; 9 queue<node>q; 10 int n,k; 11 12 int main(){ 13 cin>>n>>k; 14 cur.x=n,cur.temp=0; 15 q.push(cur); 16 visit[n]=true; 17 if(n==k){ 18 cout<<"0"<<endl; 19 return 0; 20 } 21 while(!q.empty()){ 22 cur=q.front();q.pop(); 23 nxt.temp=cur.temp+1; 24 for(int i=1;i<=3;i++){ 25 switch(i){ 26 case 1: nxt.x=cur.x+1;break; 27 case 2: nxt.x=cur.x-1;break; 28 case 3: nxt.x=cur.x*2;break; 29 } 30 if(nxt.x>=0&&nxt.x<=100000&&!visit[nxt.x]){ 31 if(nxt.x==k){ 32 cout<<nxt.temp<<endl;return 0; 33 } 34 q.push(nxt); 35 visit[nxt.x]=true; 36 } 37 } 38 } 39 return 0; 40 }