题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=37

将操作分解为基本步骤,编写函数,重复调用

C++11代码如下:

 #include<iostream>
#include<vector>
#include<string>
using namespace std; const int maxn =;
vector<int> pile[maxn];
int n;
void find_block(int a, int& p, int& h) { //找到木块所在的位置和高度(从0开始)
for (p = ; p < n; p++) {
for (h = ; h < pile[p].size(); h++) {
if (pile[p][h] == a) return;
}
}
} void clear_above(int p, int h) { //将p位置高度h以上的木块移回原位
for (int i = h + ; i < pile[p].size(); i++) {
int b = pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h + ); //保留 0-h高度的木块
} void pile_onto(int p, int p2,int h) { //将p位置处从h高度的木块全部移动到p2顶部
for (int i = h; i < pile[p].size(); i++) {
pile[p2].push_back(pile[p][i]);
}
pile[p].resize(h); //保留高度0~h-1的木块
} void print() { //输出全部操作介绍后各个位置木块的信息
for (int i = ; i < n; i++) {
cout << i << ':';
for (int j = ; j < pile[i].size(); j++)
cout << ' ' << pile[i][j];
cout << endl;
}
} int main() {
int ha, pa, hb, pb;
cin >> n;
for (int i = ; i < n; i++) pile[i].push_back(i);
string s1, s2;
int a, b;
while (cin >> s1 >> a >> s2 >> b) {
find_block(a, pa, ha);
find_block(b, pb, hb);
if (pa == pb) continue;
if (s1 == "move") clear_above(pa, ha);
if (s2 == "onto") clear_above(pb, hb);
pile_onto(pa, pb, ha);
}
print();
return ;
}

最新文章

  1. python通过protobuf实现rpc
  2. 【IIS】IIS6.1配置 *.config 文件 的MIME类型用于升级程序
  3. BZOJ1017: [JSOI2008]魔兽地图DotR
  4. Mac常用命令
  5. Missing number
  6. 获取当前html标签自定义属性的值
  7. nodejs+express中设置登录拦截器
  8. 实现listview的条目点击后改变背景颜色
  9. Android开发_控制硬加速hardwareAccelerated
  10. 采用objdump调试驱动程序
  11. 2016 SyScan360 国际前瞻信息安全会议 多角度探讨信息安全
  12. 带你重拾JavaScript(2)之console的你所不知道的功能
  13. centos环境的python、scrapy部署
  14. &lt;数据结构基础学习&gt;(三)Part 1 栈
  15. 痞子衡嵌入式:SEGGER J-Link仿真器硬件版本变迁
  16. 转://Window下安装Oracle ASM单实例数据库
  17. 2018牛客网暑期ACM多校训练营(第三场)C Shuffle Cards(可持久化平衡树/splay)
  18. XXS level8
  19. 基于SQL和PYTHON的数据库数据查询select语句
  20. springboot-6-整合jdbc

热门文章

  1. maven 启动 tomcat 及 跳过 test 安装
  2. Kubernetes 1.5通过Ceph实现有状态容器
  3. 第2章-Vue.js指令
  4. &#39;0&#39;,&#39;\0&#39;,NULL,EOF的区别
  5. js-之闭包的理解
  6. jdbc:oracle:thin:@localhost:1521:orcl和jdbc:oracle:thin:@localhost:1521/orcl的区别
  7. jq消除网页滚动条
  8. NYOJ 1012 RMQ with Shifts (线段树)
  9. 使用SPLUNK进行简单Threat Hunting
  10. 2. 数据库文件配置与简单操作 Model / M()