UVa 101 - The Blocks Problem
2016-04-25 18:27
417 查看
101 - The Blocks Problem
思路:例题5-2
思路:例题5-2
#include <cstdio> #include <cstring> #include <string> #include <iostream> #include <vector> using namespace std; const int maxn = 30; int n; vector<int>pile[maxn]; void find_block(int a, int& p, int& h) { for (p = 0; p < n; p++) { for (h = 0; h < pile[p].size(); h++) if (pile[p][h] == a) return; } } void clear_above(int p, int h) { for (int i = h + 1; i < pile[p].size(); i++) { int b = pile[p][i]; pile[b].push_back(b); } pile[p].resize(h + 1); } void pile_onto(int p, int h, int p2) { for (int i = h; i < pile[p].size(); i++) pile[p2].push_back(pile[p][i]); pile[p].resize(h); } void print() { for (int i = 0; i < n; i++) { printf("%d:", i); for (int j = 0; j < pile[i].size(); j++) printf(" %d", pile[i][j]); printf("\n"); } } int main(void) { int a, b; cin >> n; string s1, s2; for (int i = 0; i < n; i++) pile[i].push_back(i); while (cin >> s1 >> a >> s2 >> b) { int pa, pb, ha, hb; find_block(a, pa, ha); find_block(b, pb, hb); if (pa == pb) continue; if (s2 == "onto") clear_above(pb, hb); if (s1 == "move") clear_above(pa, ha); pile_onto(pa, ha, pb); } print(); return 0; }
相关文章推荐
- java显示声音波形图示例
- 123
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 链表中环的入口结点
- linux jps: command not found
- [设计模式学以致用]备忘录模式
- Qt文件读写操作
- strtok() 用于分割字符串
- 使用IPtables 实现数据转发
- php安装
- 简单的cc攻击防御
- 【MongoDB】常用知识点
- python自底向上的执行单元测试
- Fragment 内实现对返回键的监听处理
- System and Device Programming------Kernel
- 操作系统笔试面试笔记总结
- final对象的生命周期为什么可以超越定义这个对象的方法?
- Linux常用命令-35条
- 位图文件的保存
- 游云SDK for Cordova API