UVa-101 The Blocks Problem(栈模拟)
来源:互联网 发布:南平seo快速优化软件 编辑:程序博客网 时间:2024/06/06 18:09
题意:给出n个数字(0到n-1),有四种操作:
move a onto b: 把a上的数字回到初始位置,把b上的数字回到初始位置,把a移动到b上
move a over b:把a上的数字回到初始位置,把a移动到b上
move a onto b:把b上的数字回到初始位置,把a和a上的数字一起移动到b上,a和a上的数字顺序不变
move a over b:把a和a上的数字一起移动到b上最顶层的数字上,a和a上的数字顺序不变
分析:用栈来模拟操作
#include <iostream> #include <stack> #include <string> #include <stdio.h> using namespace std; stack<int> st[35];int pos[35];int n;int main(){char a[60], b[60];int x, y;cin>>n;for(int i = 0; i<n; i++){st[i].push(i);pos[i] = i;}while(scanf("%s", a)==1){if(a[0] == 'q') break;scanf("%d %s %d", &x, b, &y);if(pos[x] == pos[y]) continue;if(a[0] == 'm'){if(b[1] == 'n'){while(st[pos[x]].top()!=x){st[st[pos[x]].top()].push(st[pos[x]].top());pos[st[pos[x]].top()] = st[pos[x]].top(); //这里一开始不记得回到原来位置,re了半天st[pos[x]].pop();}while(st[pos[y]].top()!=y){st[st[pos[y]].top()].push(st[pos[y]].top());pos[st[pos[y]].top()] = st[pos[y]].top();st[pos[y]].pop();}st[pos[y]].push(x);st[pos[x]].pop();pos[x] = pos[y];}else if(b[1] == 'v'){while(st[pos[x]].top()!=x){st[st[pos[x]].top()].push(st[pos[x]].top());pos[st[pos[x]].top()] = st[pos[x]].top();st[pos[x]].pop();}st[pos[y]].push(x);st[pos[x]].pop();pos[x] = pos[y];}}else if(a[0] == 'p'){if(b[1] == 'n'){ int temp[35]; int k = 0; while(st[pos[y]].top()!=y){ st[st[pos[y]].top()].push(st[pos[y]].top()); pos[st[pos[y]].top()] = st[pos[y]].top(); st[pos[y]].pop(); } while(st[pos[x]].top()!=x){ temp[k++] = st[pos[x]].top(); st[pos[x]].pop();}temp[k] = x;st[pos[x]].pop();for(int i = k; i>=0; i--){st[pos[y]].push(temp[i]);pos[temp[i]] = pos[y];} } else if(b[1] == 'v'){ int temp[60]; int k = 0; while(st[pos[x]].top()!=x){ temp[k++] = st[pos[x]].top(); st[pos[x]].pop();}temp[k] = x;st[pos[x]].pop();for(int i = k; i>=0; i--){st[pos[y]].push(temp[i]);pos[temp[i]] = pos[y];}}}}for(int i = 0; i<n; i++){int temp[60], k = 0;while(st[i].size()){temp[k++] = st[i].top();st[i].pop();}printf("%d:", i);for(int j = k-1; j>=0; j--){printf(" %d", temp[j]);}printf("\n");}return 0;}
阅读全文
0 0
- UVa-101 The Blocks Problem(栈模拟)
- Uva 101 - The Blocks Problem//简单模拟
- Uva 101 - The Blocks Problem//简单模拟
- UVA 101 - The Blocks Problem(模拟)
- uva 101 The Blocks Problem(模拟)
- UVa 101 The Blocks Problem (超级模拟)
- uva 101 - The Blocks Problem(模拟)
- uva 101 The Blocks Problem (模拟)
- UVA 101 The Blocks Problem(模拟)
- UVa 101 The Blocks Problem [模拟]
- The Blocks Problem UVA 101 模拟
- uva 101 The Blocks Problem 模拟
- UVa 101 - The Blocks Problem 栈模拟 TLE
- uva 101 The Blocks Problem(模拟栈)
- uva-101 && poj 1208 The Blocks Problem (模拟栈)
- UVA-101 The Blocks Problem 栈
- uva 101 The Blocks Problem (基本算法-模拟)
- UVA - 101 The Blocks Problem(STL,模拟)
- 【POJ】2739
- 工作中的一些结论
- 归一化
- div 中各种边框
- HDU 3820 Golden Eggs(最大独立集)
- UVa-101 The Blocks Problem(栈模拟)
- Windows下Eclispe远程开发Mapreduce程序
- SSH协议(1)-工作原理及过程
- 发布项目到中央库的一些常见问题
- Redis系列之 《Redis入门》
- 【perl】cpan 非root安装perl模块
- Picasso的封装(二)
- Qt使用 消息队列框架 RabbitMQ
- Qt渐变之线性渐变