本文共 1094 字,大约阅读时间需要 3 分钟。
67864 | 19.16% | 14194 | |
题目类型: 数据结构, 二叉树
题意:
有N个位置, 编号为 0~N-1, 初始下,各个位置上放置这和位置编号相同的砖块,即砖块1,砖块2……砖块N-1。 然后有四种命令操作方式:
1.move a onto b :把砖a移动到砖b上面,如果a和b上面都有砖块,要先把它们放回原来位置。
2.move a over b: 把a移动到有b的“砖堆”上面,移动前需要把a上面的砖块都恢复到原位置,b的堆保持不变。
3.pile a onto b:把a之上的(包括a)搬到b之上,要先把b上面的砖放回到原来位置
4.pile a over b: 直接把a之上的(包括a)搬到b所在的“砖堆”上。
5.quit: 结束命令。
解体思路: 初刚看到时,想用stack模拟,但是这样操作会比较多,可能会TLE。 于是自己模拟写了类似栈的类,但是可以随机存储。 STL确实用起来比较方便,但是很不灵活。
#include#include #include using namespace std;int n, block_a, block_b, pos_a, pos_b;string command1,command2;class Pile{public: Pile(){ index = 0; } void init_set(int a){ index=0; arr[index++] = a; } int top(){ return arr[index-1]; } void add(int a){ arr[index++] = a; } bool is_empty(){ if(index==0) return true; return false; } int find(int a){ for(int i=0; i > command1 >> block_a >> command2 >> block_b){ if(command1=="quit") break; solve(); } output(); return 0;}
转载地址:http://vuzni.baihongyu.com/