题目大意:原题链接

关键是正确理解题目意思

首先:介绍一下list容器的一些操作:参考链接

list<int> c1;

c1.unique();              去重。

c1.reverse();             反转链表。

c1.insert(pos,num);   在pos位置插入元素num。

c1.insert(pos,n,num);在pos位置插入n个元素num。

c1.assign(n,num);     将n个num拷贝赋值给链表c。

c1.sort();                  将链表排序(默认升序)。

c1.swap(c2);             将c1和c2交换。

c1.remove(num);       删除链表中值为num的元素。

c1.push_back(num);  在末尾位置添加一个元素。

c1.pop_back();          删除最末尾的元素。

c1.push_front(num);  在开始位置添加一个元素。

c1.pop_front();          删除第一个元素。

c1.erase(pos);    删除pos位置的元素。

按要求模拟木块移动:有n(0<n<25)块block以及5种操作:

move a onto b:在将a搬到b所在的那堆积木上之前,先把a和b上方的积木放回原來的位置

move a over b:在将a搬到b所在的那堆积木上之前,先把a上方的积木放回原來的位罝

pile a onto b  : 在将a搬到b所在的那堆积木上之前,先将b上方的积木放回原来的位置

pile a over b  : 将包括a本身和a上方的积木一起搬到到b所在的那堆上方(以上三种也都包括a)

quit:结束命令,以上四个操作中,若a和b在同一堆中,则不进行任何操作。

注意:

1.当一个位置的初始箱子移走之后,因为这里没有箱子,其他箱子也不会移到这个位置。

2.数组p[id]=jd表示编号为id的木块放在编号为jd的木块上面

3.void Move(int x,int y)函数中为了保证移动后保持原来的顺序(包括最下方的木块)而利用一个临时变量

#include<list>
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
list<int> temp;
list<int> lis[];
int p[]; void Recover(int x)
{
int id=p[x];
while(lis[id].back()!=x){
int t=lis[id].back();
p[t]=t;//细节
lis[t].push_back(t);
lis[id].pop_back();
}
}
void Move(int x,int y)
{
int id=p[x],jd=p[y];
while(lis[id].back()!=x){
temp.push_back(lis[id].back());
lis[id].pop_back();
}
p[x]=jd;//细节
lis[jd].push_back(lis[id].back());//正确理解题意保持原来的的顺序
lis[id].pop_back();//清理干净
while(!temp.empty()){
lis[jd].push_back(temp.back());
p[temp.back()]=jd;
temp.pop_back();
}
} int main()
{
int n,a,b;
string str1,str2;
scanf("%d",&n);
for(int i=;i<n;i++){
p[i]=i;
lis[i].push_back(i);
}
while(cin>>str1&&str1!="quit"){
cin>>a>>str2>>b;
if(str1=="move"&&str2=="onto"){
Recover(a);
Recover(b);
Move(a,b);
}
else if(str1=="move"&&str2=="over"){
Recover(a);
Move(a,b);
}
else if(str1=="pile"&&str2=="onto"){
Recover(b);
Move(a,b);
}
else if(str1=="pile"&&str2=="over")
Move(a,b);
}
for(int i=;i<n;i++){
printf("%d:",i);
while(!lis[i].empty()){
printf(" %d",lis[i].front());
lis[i].pop_front();
}
printf("\n");
}
}

PKU 1208 The Blocks Problem(模拟+list应用)的更多相关文章

  1. POJ 1208 The Blocks Problem

    The Blocks Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5397   Accepted: 231 ...

  2. uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟

    挺水的模拟题,刚开始题目看错了,poj竟然过了...无奈.uva果断wa了 搞清题目意思后改了一下,过了uva. 题目要求模拟木块移动: 有n(0<n<25)快block,有5种操作: m ...

  3. POJ 1208 The Blocks Problem --vector

    http://poj.org/problem?id=1208 晚点仔细看 https://blog.csdn.net/yxz8102/article/details/53098575 #include ...

  4. B -- POJ 1208 The Blocks Problem

    参考:https://blog.csdn.net/yxz8102/article/details/53098575 https://www.cnblogs.com/tanjuntao/p/867892 ...

  5. The Blocks Problem(vector)

    题目链接:http://poj.org/problem?id=1208 The Blocks Problem Time Limit: 1000MS   Memory Limit: 10000K Tot ...

  6. 【UVA - 101】The Blocks Problem(vector+模拟)

    The Blocks Problem Descriptions:(英语就不说了,直接上翻译吧) 初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作: move a onto b: 把a和 ...

  7. UVa 101 The Blocks Problem Vector基本操作

    UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...

  8. 木块问题(The Blocks Problem,Uva 101)

    不定长数组:vector vector就是一个不定长数组.不仅如此,它把一些常用操作“封装”在了vector类型内部. 例如,若a是一个vector,可以用a.size( )读取它的大小,a.resi ...

  9. UVa 101 - The Blocks Problem(积木问题,指令操作)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

随机推荐

  1. FormData异步上传

    1.代码片段一: ajaxUpload: function () { var url = this.$avatarForm.attr('action'), data = new FormData(th ...

  2. jquery ajax 的用法

    jquery的ajax请求的主要参数 beforeSend:发送ajax请求之前 success:发送ajax请求成功 error:发送ajax请求错误,通常是网络失去连接.服务器出错.后台方法错误等 ...

  3. jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法

    本文实例讲述了jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法.分享给大家供大家参考.具体实现方法如下: 这里主要通过val方法设置按钮的文字,并用attr方法修改disabled属性实 ...

  4. jQuery动态星级评分效果实现方法

    本文实例讲述了jQuery动态星级评分效果实现方法.分享给大家供大家参考.具体如下: 这里的jQuery星级评分代码,是大家都很喜欢的功能,目前广泛应用,本星级评分加入了动画效果,注意,如果要真正实现 ...

  5. CDialog与CDialogEx的区别联系

    CDialogEx是VS2003之后出现的,VC++6.0没有.CDialogEx = CDialog ExtendExtend的意思是扩展,即扩展的CDialog! 这个类是CDialog的扩展类, ...

  6. 仿美团ViewPager+GridView

    在接下来我要实现一个仿美团的效果 1.首先写一个登录注册界面用到了,很简单... 这里要提醒各位在调用方法时有set...     也有add....  的方法,为了严谨可以做些正则判断手机号,用se ...

  7. [UIImage _isCached]: message sent to deallocated instance

    本文转载至 http://zhuhaibobb.blog.163.com/blog/static/2744006720124191633375/       这几天做了个APP打开20份钟左右就强制退 ...

  8. springboot整合mybatis之用外置服务器启动项目(二)

    在上一篇中我们是用的springboot自带的tomcat服务器,接下来想试一下 将springboot当做一个web项目 放在eclipse中用tomcat来启动. 首先在pom.xml中加上,移除 ...

  9. 用DX9画三角形,三个顶点要求

      用DX9画三角形,三个顶点的顺序有要求吗下面是全部代码,在 InitVB 函数中被注释掉的数组是我写的,没注释掉的是书上的代码,经过试验我的坐标不能显示出图形,而书上的坐标可以,这是为什么? #i ...

  10. 【BZOJ2553】[BeiJing2011]禁忌 AC自动机+期望DP+矩阵乘法

    [BZOJ2553][BeiJing2011]禁忌 Description Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平. ...