赞
踩
总时间限制:
1000ms
内存限制:
65536kB
描述
Hopscotch(跳房子) is a popular game. The rule is very simple: we draw some houses on the ground and then throw a stone. Based on the position of the stone, we decide which house to jump to. Here, we use consecutive positive integer coordinates on the x-axis to represent the houses,the coordinate of the ith house is i. We also assume that there are infinite number of houses.Then, we define the new rules as follows, each time we throw a stone,
For example, initially at house 1, and in order to go to house 6, we can throw the stones in two ways:HHHOO or HHOHO.Now,your task is to compute the least number of jumps (k) needed to jump from a source house (n) and a destination house (m). You should also output the corresponding way of throwing the stones. If there are multiple ways, please output the smallest way in alphabet order.
输入
There are multiple test cases. For each test case, there are two integers n and m (1<=n, m<=1000), representing the source house and destination house. The input ends with 0 0.
输出
For each test case, the first line of output is an integer, which is the minimal number of jumps (k). The testing data guarantees that there is a solution and k <=25. The second line outputs the corresponding way of throwing the stone.
样例输入
1 6
0 0
样例输出
5
HHHOO
提示
For the sample input, the minimal number of jump is 5 (k), and correspondingly there are two ways of throwing stones,
1->H->3->H->9->H->27->O->13->O->6
1->H->3->H->9->O->4->H->12->O->6
We choose the first one as it is smaller in alphabet order.
int main() { int m,n; while(cin>>m>>n && (m||n)){ if(m==n){ cout<<"0\n"<<endl; continue; } //BFS m->n queue<int>q; queue<string>pq; q.push(m); pq.push(""); int curr; string currp, best; while(q.empty()==0 && best.empty()){ curr=q.front(); q.pop(); currp=pq.front(); pq.pop(); //H currp.push_back('H'); if(3*curr==n){//solved if(best.empty() || currp<best){ best=currp; } } else{ q.push(3*curr); pq.push(currp); } //O currp.pop_back(); currp.push_back('O'); if(curr/2==n){//solved if(best.empty() || currp<best){ best=currp; } } else{ q.push(curr/2); pq.push(currp); } } cout<<best.size()<<endl; cout<<best<<endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。