NOIP模拟赛 抓牛
【题目描述】
农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来.
他们都站在数轴上.约翰在N(O≤N≤100000)处,奶牛在K(O≤K≤100000)处.约翰有两种办法移动,步行和瞬移:步行每秒种可以让约翰从x处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的奶牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.
那么,约翰需要多少时间抓住那只牛呢?
【输入格式】
仅有两个整数N和K
【输出格式】
最短时间
【样例输入】
5 17
【样例输出】
4
暴力bfs
1 #include<iostream> 2 #include<cstring> 3 #include<queue> 4 using namespace std; 5 6 int n,k; 7 bool vis[500000]; 8 struct data{int x,t;}; 9 data q; 10 11 int main() 12 { 13 cin>>n>>k; 14 queue<data> Q; 15 Q.push((data){n,0}); 16 while(!Q.empty()) 17 { 18 q=Q.front();Q.pop(); 19 if(vis[q.x]) continue; 20 if(q.x==k) break; 21 vis[q.x]=1; 22 if(q.x<k) 23 { 24 Q.push((data){q.x+1,q.t+1}); 25 Q.push((data){2*q.x,q.t+1}); 26 } 27 if(q.x) 28 Q.push((data){q.x-1,q.t+1}); 29 } 30 cout<<q.t<<endl; 31 return 0; 32 }