uva101
来源:互联网 发布:淘宝详情页的制作步骤 编辑:程序博客网 时间:2024/05/19 01:08
本题一共四个命令:
1.move a onto b,把a和b上面的方块都放回原来位置,然后把a放到b上面;
2.move a over b,把a上面的放回原处,然后把a放在b所在的方块堆的上面;
3.pile a onto b,把b上面的放回原来位置,然后把a和a上面的方块整体放到b上面;
4.pile a over b,把a和a上面的方块整体放到b所在堆的上面。
你就会发现永远是a往b上放,所以只要根据要求,按照要求把木块放回原处,再叠加就可以了。
用stl做更简单。
#include<iostream>#include<cstdio>#include<vector>#include<string>using namespace std;const int maxx=30;int n;vector<int >pile[maxx];void find_dir(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_dir(int p,int h)//只需要重置被移走后的size,以防占用空间,然后出现错误{ for(int i=h+1;i<pile[p].size();i++) pile[pile[p][i]].push_back(pile[p][i]); pile[p].resize(h+1);//0到h}void onto(int p,int h,int b){ for(int i=h;i<pile[p].size();i++) pile[b].push_back(pile[p][i]); pile[p].resize(h);//不是h+1,因为h也给移走了}int main(){ int a,b; int ha,hb,ap,bp; string s1,s2; while(scanf("%d",&n)!=EOF&&n>0) { for(int i=0;i<n;i++) pile[i].push_back(i); while(cin>>s1&&s1!="quit") { cin>>a>>s2>>b; find_dir(a,ap,ha); find_dir(b,bp,hb); if(ap==bp) continue; if(s2=="onto") clear_dir(bp,hb); if(s1=="move") clear_dir(ap,ha); onto(ap,ha,bp); } for(int v=0;v<n;v++) { printf("%d:",v); for(int v1=0;v1<pile[v].size();v1++) printf(" %d",pile[v][v1]); printf("\n"); } } return 0;}
0 0
- uva101
- uva101
- uva101
- UVA101
- 数据结构uva101
- uva101心得
- uva101 The Blocks Problem
- UVa101 - The Blocks Problem
- UVA101- The Blocks Problem
- uva101 The Blocks Problem
- uva101 - The Blocks Problem
- UVA101 The Blocks Problem
- uva101 the blocks pronlem
- UVA101-The Blocks Problem
- UVA101-The Blocks Problem
- poj1208_The Blocks Problem || uva101
- uva101 The Blocks Problem
- Uva101 木块问题
- uva133
- printk打印不能显示到终端的问题 ---fwqlzz love is for ever
- TCP协议的学习(五)TCP中RST标志及其攻击
- 【VS】VS2010中如何更改项目名称
- C/C++什么是页抖动?
- uva101
- 22_广播接收者启动Activity
- LeetCode 286. Walls and Gates(墙与门)
- JAVA编程中关于toString()和new String()的区别
- Android开发中,有哪些让你觉得相见恨晚的方法、类或接口
- 从西直门立交桥谈IT架构与重构
- android国际化
- 23_System_arraycopy的使用
- 24_普通工厂设计模式