T792555 【C1028】 - 移动盒子

题目描述

你有一行盒子,从左到右依次编号为1,2,3,…,n。可以执行以下4种指令: ① 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令,指的是X紧挨着Y的情况,即XY) ② 2 X Y表示把盒子X移动到盒子Y右边(如果X已经在Y的右边则忽略此指令,指的是X紧挨着Y的情况,即YX) ③ 3 X Y表示交换盒子X和Y的位置 ④ 4 表示反转整条链 指令保证合法,即X不等于Y。 例如,当n = 6时在初始状态下(1 2 3 4 5 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。

输入格式

输入包含1组数据,第一行为盒子个数n和指令条数m,以下m行每行包含一条指令。

输出格式

输出一行,即最终排列所有奇数位置的盒子编号之和。位置从左到右编号为1~n。

说明/提示

**【输入输出样例解释】** 以第一组样例说明为例: 第1行:6 4,代表有6个盒子(初始排列为:1 2 3 4 5 6),4代表接下来有4条指令 第2行:1 1 4,代表将1盒子移动到4盒子的左边,执行完该指令后,排列为:2 3 1 4 5 6 第3行:2 3 5,代表将3盒子移动到5盒子的右边,执行完该指令后,排列为:2 1 4 5 3 6 第4行:3 1 6,代表将1盒子和6盒子交换,执行完该指令后,排列为:2 6 4 5 3 1 第5行:4,代表将整个排列反转一下,执行完该指令后,排列为:1 3 5 4 6 2 最后输出的是,最终排列的奇数位置的盒子编号之和(位置从左到右编号为1~n): 1 + 5 + 6 => 12 最终输出结果为:12 注意数据比较大,需要用到long long去保存最终的结果 **【数据范围与提示】** 50%的数据:$1 \le n, m \le 100$ 100%的数据:$1 \le n, m \le 10^{5}$ **【提示】** 本题有一定难度,建议大家先用简单的方式(比如数组、vector这类的)先去拿到个部分分(50分) 如果时间、能力允许的条件下,可以冲个100分的做法