UVa11988_Broken Keyboard
题意
输入多组数据,每组一行,包括不超过100000个字母、下划线和字符[
和]
。分别代表Home键和end键。对于每一组输入,输出打印在屏幕上的文本。
思路
使用链表。
笔者用了两个数组,一个按照输入顺序来存储字符,另一个存储当前位置字符下一个的位置。
解决
1 |
|
UVa12657_移动盒子
题意
你有一排盒子,从左到右编号为1~n,现在可以执行以下四种命令:
1 X Y
表示把盒子X移动到Y的左边。
2 X Y
表示把盒子X移动到Y的右边。
3 X Y
表示交换X和Y的位置。
4
表示整条链左右翻转。
指令保证X不等于Y,输入盒子数,指令数,以及指令,输出所有奇数位置的盒子编号之和。
分析
本题可以使用链表实现,记录下每个节点左右两边的节点编号。进行操作时,可以维护这样的连接关系。
对于翻转,把所有节点的左右邻居翻转过来的操作太繁琐,所以可以使用一个翻转标记来记录是否翻转。如果已经翻转过,那么1操作需要转化成2操作来处理,2操作转化成1操作。如果再次翻转,标记从新置0,相当于没有翻转。
解决
1 |
|