博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 101 - The Blocks Problem STL
阅读量:6906 次
发布时间:2019-06-27

本文共 1448 字,大约阅读时间需要 4 分钟。

题目:给你n个方块,有四种操作:            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所在堆的上面。分析:模拟,数据结构。观察操作,如果是move就是先把a上面的还原,如果是onto就是先把b上面的还原。            然后,就是移动一堆到另一堆的上面(单个也认为是一堆)。所以设置两个基础操作:            1.将a上面的还原init_place(a);            2.将a和上面的(可以没有上面的)放到b上面pile_a_to_b(a,b)。            那么上述的四组操作就变成下面了:            1.move a onto b,init_place(a);init_place(b);pile_a_to_b(a,b);            2.move a over b,init_place(a);pile_a_to_b(a,b);            3.pile a onto b,init_place(b);pile_a_to_b(a,b);            4.pile a over b,pile_a_to_b(a,b)。            利用两个操作轻松解决。具体实现时设置一个place数组记录每个编号的方块对应的堆。注意:如果a和b已经在一堆中就不要操作,此时认为不用移动,否则会WA。

 ~~~~~~~~~~~~~抄对了.~~~~~~~然而并不懂 .

1 #include
2 #include
3 #include
//该头文件中的 vector 是一个不定长的数组 4 #include
5 using namespace std; 6 const int maxn=30; 7 int n; 8 vector
pile[maxn]; 9 void find_block(int a,int& p,int& h)10 {11 for(p=0;p
>s1>>a>>s2>>b)51 {52 int pa,pb,ha,hb;53 find_block(a,pa,ha);54 find_block(b,pb,hb);55 if(pa=pb)56 continue;57 if(s2=="onto")58 clear_above(pb,hb);59 if(s1=="move")60 clear_above(pa,ha);61 pile_onto(pa,ha,pb);62 }63 print();64 return 0;65 }

 

转载于:https://www.cnblogs.com/A-FM/p/5169715.html

你可能感兴趣的文章
delegation
查看>>
JAVA_字节流类
查看>>
C# PDF Writer
查看>>
两两交换链表中的节点
查看>>
PCA(matlab)学习,与记录
查看>>
如何用Beyond Compare设置比较文件夹对齐方式
查看>>
linux TCP客户端指定端口号连接服务端
查看>>
CSS3设置Table奇数行和偶数行样式
查看>>
CentOS6.8下安装Docker
查看>>
java.lang.NumberFormatException 错误及解决办法
查看>>
python:大量参数如何传递
查看>>
curl 跨域请求回来的json数据带有BOM 字符\ufeff,掉诡异的BOM \ufeff
查看>>
Javascript下的AJAX
查看>>
Ado.Net Helper
查看>>
java内存溢出的解决思路
查看>>
android结合Jenkins使用V2签名
查看>>
栏目添加缩略图
查看>>
[BZOJ 1221][HNOI2001]软件开发(费用流)
查看>>
用户注册流程分析
查看>>
关于更新发布CSS和JS文件的缓存问题
查看>>