题目
要将所有同种颜色的球移到同一根柱子上, 所能进行的操作只有把一个柱子上的球移动到另一个柱子上。
关键操作:
借助空栈C和满栈B, 把所有A的x移动到顶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| int excute(stk &A, stk &B, stk &C, int x) { int res = 0; for(int i = 1; i <= A.tt; i++) if(A.a[i] == x) res++; for(int i = 1; i <= res; i++) { anss.push_back(make_pair(B.id, C.id)); C.insert(B.pop()); } while(A.tt) { if(A.a[A.tt] == x) { B.insert(A.pop()); anss.push_back(make_pair(A.id, B.id)); } else { C.insert(A.pop()); anss.push_back(make_pair(A.id, C.id)); } } for(int i = 1; i <= m - res; i++) { A.insert(C.pop()); anss.push_back(make_pair(C.id, A.id)); }
for(int i = 1; i <= res; i++) { A.insert(B.pop()); anss.push_back(make_pair(B.id, A.id)); }
for(int i = 1; i <= res; i++) { B.insert(C.pop()); anss.push_back(make_pair(C.id, B.id)); } }
|
想到了这一点就可以做出了
一种可行的方法是对着样例2模拟