1733 盒子工厂
来源:互联网 发布:创业软件办公平台 编辑:程序博客网 时间:2024/05/19 22:52
淘宝的生意越来越火,以至于包装用的盒子都供不应求。现在一个盒子工厂的老板需要你编写一个控制程序,来帮助他们制造盒子。
这个程序所需要实现的功能很简单,读取一条指令,然后指挥机械臂去执行就可以了。但是,如果指令不合法,应该把这条命令忽略掉。
初始时有 n 个盒子(编号0 ~ n-1)顺次排列在一条流水线上。
有效命令包括:
move a onto b
a 和 b 均为盒子编号,此命令作用是将 a 和 b 两个盒子之上的盒子全部放回初始位置以后,将 a 放于盒子 b 上;
move a over b
a 和 b 均为盒子编号,此命令作用是在把所有在 a 盒子之上的盒子放回初始位置后,把 a 放于含有 b 盒子的堆上;
pile a onto b
a 和 b 均为盒子编号,此命令作用是先把放在 b 盒子上面的所有盒子放回初始位置,再把 a 及 a 盒子上面所有盒子移到 b 盒子所在堆上,移动时保持 a 及 a 以上盒子的堆放次序;
pile a over b
a 和 b 均为盒子编号,此命令作用是把 a 及 a 上面的所有盒子放在含有 b 盒子的堆上面;
quit
退出程序。
任何命令中,假设出现 a = b 或者 a 和 b 出现在同一堆盒子中,那么我们认为这条命令不合法。所以你的控制程序需要知道任何时候流水线上的盒子堆叠状况。
- 输入
输入包含多组数据。
对于每组数据,第一行为一个整数 n (1 <= n <= 25),为盒子的个数。
接下来为命令序列,每行一条有效命令,格式如上文描述,你的程序需要顺序执行这些命令。命令序列以一条 quit 命令结束。
当 n = 0 时输入结束。- 输出
对于每组数据,输出 n 行,为控制程序退出后流水线上的盒子堆叠状况。第 i+1 行为编号为 i 的盒子的初始位置所堆叠的盒子状况:以 i 开头,后接":",然后空格,然后最底层盒子编号,再空格,再是从下数第二个盒子的编号......
模拟题
#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;int box[ 27 ][ 2 ];int main(){int n;cin >> n;string s;int k1, k2;string s2;while ( n!= 0 ){ vector<int> v[ 27 ]; for ( int i = 0; i < n; i++ ) { v[ i ].push_back( i ); box[ i ][ 0 ] = i; box[ i ][ 1 ] = v[ i ].size() - 1; } cin >> s; while ( s != "quit") { cin >> k1 >> s2 >> k2; if ( s == "move" && s2 == "onto" ) { if ( box[ k1 ][ 0 ] != box[ k2 ][ 0 ] ) { vector<int>::iterator it; it =v[ box[ k1 ][ 0 ] ].begin() + box[ k1 ][ 1 ]; it++; while ( it != v[ box[ k1 ][ 0 ] ].end() ) { v[ *it ].push_back( *it ); box[ *it ][ 0 ] = *it; box[ *it ][ 1 ] = v[ *it ].size() - 1; it++; } it--; while ( it != v[ box[ k1 ][ 0 ] ].begin() + box[ k1 ][ 1 ] ) { v[ box[ k1 ][ 0 ] ].pop_back(); it--; } //vector<int>::iterator it; it = v[ box[ k2 ][ 0 ] ].begin() + box[ k2 ][ 1 ]; it++; while ( it != v[ box[ k2 ][ 0 ] ].end() ) { v[ *it ].push_back( *it ); box[ *it ][ 0 ] = *it; box[ *it ][ 1 ] = v[ *it ].size() - 1; it++; } it--; while ( it != v[ box[ k2 ][ 0 ] ].begin() + box[ k2 ][ 1 ] ) { v[ box[ k2 ][ 0 ] ].pop_back(); it--; } v[ box[ k1 ][ 0 ] ].pop_back(); v[ box[ k2 ][ 0 ] ].push_back( k1 ); box[ k1 ][ 0 ] = box[ k2 ][ 0 ]; box[ k1 ][ 1 ] = v[ box[ k2 ][ 0 ] ].size() - 1; } } else if ( s == "move" && s2 == "over" ) { if ( box[ k1 ][ 0 ] != box[ k2 ][ 0 ] ) { vector<int>::iterator it; it = v[ box[ k1 ][ 0 ] ].begin() + box[ k1 ][ 1 ] ; it++; while ( it != v[ box[ k1 ][ 0 ] ].end() ) { v[ *it ].push_back( *it ); box[ *it ][ 0 ] = *it; box[ *it ][ 1 ] = v[ *it ].size() - 1; it++; } it--; while ( it != v[ box[ k1 ][ 0 ] ].begin() + box[ k1 ][ 1 ] ) { v[ box[ k1 ][ 0 ] ].pop_back(); it--; } v[ box[ k1 ][ 0 ] ].pop_back(); v[ box[ k2 ][ 0 ] ].push_back( k1 ); box[ k1 ][ 0 ] = box[ k2 ][ 0 ]; box[ k1 ][ 1 ] = v[ box[ k2 ][ 0 ] ].size() - 1; } } else if ( s == "pile" && s2 == "onto" ) { if ( box[ k1 ][ 0 ] != box[ k2 ][ 0 ] ) { vector<int>::iterator it,it1,it2; it = v[ box[ k2 ][ 0 ] ].begin() + box[ k2 ][ 1 ] ; it++; while ( it != v[ box[ k2 ][ 0 ] ].end() ) { v[ *it ].push_back( *it ); box[ *it ][ 0 ] = *it; box[ *it ][ 1 ] = v[ *it ].size() - 1; it++; } it--; while ( it != v[ box[ k2 ][ 0 ] ].begin() + box[ k2 ][ 1 ] ) { v[ box[ k2 ][ 0 ] ].pop_back(); it--; } it = v[ box[ k1 ][ 0 ] ].begin() + box[ k1 ][ 1 ]; it1 = v[ box[ k1 ][ 0 ] ].begin(); it2 = v[ box[ k1 ][ 0 ] ].end(); int l0 = box[ k1 ][ 0 ]; int l1 = box[ k1 ][ 1 ]; while ( it != it2 ) { v[ box[k2 ][ 0 ] ].push_back( *it ); box[ *it ][ 0 ] = box[k2 ][ 0 ]; box[ *it ][ 1 ] = v[box[k2 ][ 0 ] ].size() - 1; it++; } it--; while ( it != it1 + l1 ) { it--; v[l0 ].pop_back(); } v[ l0 ].pop_back(); } } // else if ( s == "pile" && s2 == "over" ) { if ( box[ k2 ][ 0 ] != box[ k1 ][ 0 ] ) { vector<int>::iterator it,it1, it2; it = v[ box[ k1 ][ 0 ] ].begin() + box[ k1 ][ 1 ] ; it1 = v[ box[ k1 ][ 0 ] ].begin(); it2 = v[ box[ k1 ][ 0 ] ].end(); int l0 = box[ k1 ][ 0 ]; int l1 = box[ k1 ][ 1 ]; while ( it != it2 ) { v[ box[k2 ][ 0 ] ].push_back( *it ); box[ *it ][ 0 ] = box[k2 ][ 0 ]; box[ *it ][ 1 ] = v[box[k2 ][ 0 ] ].size() - 1; it++; } it--; while ( it != it1 + l1 ) { it--; v[ l0 ].pop_back(); } v[ l0 ].pop_back(); } } cin >> s; } for ( int i = 0; i < n; i++ ) { cout << i << ":"; for ( vector<int>::iterator it = v[ i ].begin(); it != v[ i ].end(); it++ ) { cout << " " << *it; } cout << endl; } cin >> n;}return 0;}
- 1733 盒子工厂
- 盒子
- 滑动盒子/弹性盒子
- 工厂
- 工厂
- 工厂
- 工厂
- 工厂
- 工厂
- 工厂
- CSS 盒子
- 盒子模型
- 盒子模型
- 真心盒子
- "盒子"是什么
- 盒子模型
- 盒子模型
- css盒子
- 1731 圣诞节礼物
- ext开发环境总结
- python 写的两种打印全排列的方法速度对比
- 用匈牙利算法求二分图的最大匹配
- 1732 隐藏的BUAA
- 1733 盒子工厂
- HDOJ 1150 Machine Schedule解题报告
- C [ OPENMP ]
- 1766 转义字符
- 正版系统与盗版系统的区别
- RGB888和565相互转换
- 什么是Struts2
- VB与SQL语句
- zoj 3179 - Calculate With Abacus