PKU 1208 The Blocks Problem(模拟+list应用)
题目大意:原题链接
关键是正确理解题目意思
首先:介绍一下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应用)的更多相关文章
- POJ 1208 The Blocks Problem
The Blocks Problem Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5397 Accepted: 231 ...
- uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
挺水的模拟题,刚开始题目看错了,poj竟然过了...无奈.uva果断wa了 搞清题目意思后改了一下,过了uva. 题目要求模拟木块移动: 有n(0<n<25)快block,有5种操作: m ...
- POJ 1208 The Blocks Problem --vector
http://poj.org/problem?id=1208 晚点仔细看 https://blog.csdn.net/yxz8102/article/details/53098575 #include ...
- B -- POJ 1208 The Blocks Problem
参考:https://blog.csdn.net/yxz8102/article/details/53098575 https://www.cnblogs.com/tanjuntao/p/867892 ...
- The Blocks Problem(vector)
题目链接:http://poj.org/problem?id=1208 The Blocks Problem Time Limit: 1000MS Memory Limit: 10000K Tot ...
- 【UVA - 101】The Blocks Problem(vector+模拟)
The Blocks Problem Descriptions:(英语就不说了,直接上翻译吧) 初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作: move a onto b: 把a和 ...
- UVa 101 The Blocks Problem Vector基本操作
UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...
- 木块问题(The Blocks Problem,Uva 101)
不定长数组:vector vector就是一个不定长数组.不仅如此,它把一些常用操作“封装”在了vector类型内部. 例如,若a是一个vector,可以用a.size( )读取它的大小,a.resi ...
- UVa 101 - The Blocks Problem(积木问题,指令操作)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
随机推荐
- json 转 T
T test = JsonConvert.DeserializeObject<T>(json);(json.net)
- spring配置文件头部配置解析
http://blog.csdn.net/f_639584391/article/details/50167321
- 转:解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误
操作SQL数据库,Python使用的是版本2.7,但是在运行的时候出现了异常错误UnicodeEncodeError:'ascii' codec can't encode characters in ...
- < APT 攻击>看起来是 .PPT 附件,竟是 .SCR !!
趋势科技以前在2013年下半年度目标攻击综合报告里指出,发现了好几起APT攻击-高级持续性渗透攻击 (Advanced Persistent Threat, APT) /目标攻击相关的攻击活动. 趋势 ...
- nginx 服务器重启命令,关闭(转)
nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是 ...
- StepVR插件容易出现的坑------项目设置一定要勾选Start in VR或者在exe快捷方式中添加-vr参数
- Java四种会话跟踪技术
1.cookie:2.session:3.隐藏表单域:4.URL重写
- Codeforces Round #190 (Div. 2).D
一道贪心题. 可以分两种情况 1 .是没有把对面的牌全打败,那么只要用最大的可能去打攻击状态的牌. 2. 是将对面的牌全打败,那么只要保证打对面防守状态的花费最小,就可以保证最后的结果最大 两种情况下 ...
- 云计算之路-阿里云上:对“黑色n秒”问题的最终猜想——CPU C-states引起的
如果说2013年云计算之路的主题是“踩坑”,那么2014年我们希望云计算之路的主题变成“填坑”——当然填坑是阿里云来完成的,我们只是见证曾经的坑坑洼洼变成平坦大道. 15号(周四)晚上我们发现了SLB ...
- R语言中基于聚类的离群点挖掘
思路:首先,通过K-means算法将数据点划分为成若K个簇:然后计算每一个数据对象到最近簇的中心距离,来与离群点设置的阈值进行比较,以此来判别该数据对象是否是离群点. 1.读取数据 data<- ...