紫书一移动盒子(Boxes in a Line)

  一行中有 n 个框 1...n 从左到右。你的任务是模拟 4 种命令:
  •1 X Y:将框 X 左移到 Y(如果 X 已经是 Y 的左边,则忽略)。
  •2 X Y:将框 X 右移到 Y(如果 X 已经是 Y 的右边,则忽略)。
  •3 X Y:交换框 X 和 Y。
  •4:反转整行。
  命令保证有效,即 X 不等于 Y。
  例如,如果 n=6,执行 1 1 4 后,该行变为 2 3 1 4 5 6。然后执行 2 3 5,该行变为 2 1 4 5 3 6。然后在执行 3 1 6 后,该行变为 2 6 4 5 3 1。然后在执行 4 之后,行变为 1 3 5 4 6 2。

【输入格式】
  输入包含不超过10组数据,每组数据第一行为盒子数n和指令m,以下m行每行包含一条指令。
【输出格式】
  每组数据输出一行,即所有奇数位置的盒子编号之和。位置从左到右编号为1~n。
【输入样例】
  6 4
  1 1 4
  2 3 5
  3 1 6
  4
  6 3
  1 1 4
  2 3 5
  3 1 6
  100000 1
  4
【输出样例】

Case 1: 12 Case 2: 9 Case 3: 2500050000

分析:(双向链表)

 运用left数组和right数组来存储某个数左右两边的盒子编号,然后根据输入输出来模拟移动盒子的过程。书上的代码看了之后感觉细节满满Orz,有很多可以学习借鉴的地方。

由于之间链接时的操作较多,书上使用了一个link函数,很是方便,对我来说就很难想到了。。

 这个我在后面也理解了好久(扶额..)

1 void link(int L,int R) 2 { 3 right[L]=R; 4 left[R]=L; 5 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsxfy.html