atcoder#ARC147B. [ARC147B] Swap to Sort

[ARC147B] Swap to Sort

题目描述

(1,2,,N) (1,2,\ldots,N) の順列 P=(P1,P2,,PN) P=(P_1,P_2,\ldots,P_N) が与えられます。あなたは以下の 2 2 種類のどちらかの操作を行うことを繰り返すことで P P を昇順に並び替えたいです。

  • 操作 A A 1  i  N1 1\ \leq\ i\ \leq\ N-1 を満たす整数 i i を選び、Pi P_i Pi+1 P_{i+1} を入れ替える
  • 操作 B B 1  i  N2 1\ \leq\ i\ \leq\ N-2 を満たす整数 i i を選び、Pi P_i Pi+2 P_{i+2} を入れ替える

操作 A A の回数が最小となり、かつ操作回数の合計が 105 10^5 回以下であるような操作の手順を 1 1 つ示してください。

なお、この問題の制約のもとで、条件を満たす解が存在することが証明できます。

输入格式

入力は以下の形式で標準入力から与えられる。

N N P1 P_1 P2 P_2 \ldots PN P_N

输出格式

操作回数の合計を S(0  S  105) S\,(0\ \leq\ S\ \leq\ 10^5) 回としたとき、S+1 S+1 行出力せよ。

1 1 行目には S S を出力せよ。

s+1(1  s  S) s+1\,(1\ \leq\ s\ \leq\ S) 行目には、

  • s s 回目の操作が操作 A A で、選ぶ整数が i(1  i  N1) i\,(1\ \leq\ i\ \leq\ N-1) の場合、A i
  • s s 回目の操作が操作 B B で、選ぶ整数が i(1  i  N2) i\,(1\ \leq\ i\ \leq\ N-2) の場合、B i

出力せよ。

複数の解がある場合は、どれを答えてもよい。

题目大意

题目描述

现有一个11NN的排列P=(P1,P2,,PN) P=(P_1,P_2,\ldots,P_N) 。你可以重复执行以下两种操作来使PP从小到大排序。

  • 操作A:A:选择一个整数ii满足1  i  N11\ \leq\ i\ \leq\ N-1,然后交换PiP_iPi+1P_{i+1}
  • 操作B:B:选择一个整数ii满足1  i  N21\ \leq\ i\ \leq\ N-2,然后交换PiP_iPi+2P_{i+2}

请找出一个满足以下要求的操作序列

  • 操作AA的数量最少
  • 操作的总数不超过10510^5

在题目条件的约束下,我们可以证明合法的解总是存在的

输入格式

标准输入格式如下

N N

P1 P_1 P2 P_2 \ldots PN P_N

输出格式

设你的答案中的操作次数为SS。输出有S+1S+1行。

第一行包含整数SS

(s+1)(1sS)(s+1)(1≤s≤S)行中应包含以下内容。

  • 如果第ss个操作为AA,输出A iii为此次操作选择的整数
  • 如果第ss个操作为BB,输出B iii为此次操作选择的整数

如果有多个合法解,输出一个即可。

样例 #1

样例输入 #1

4
3 2 4 1

样例输出 #1

4
A 3
B 1
B 2
B 2

样例 #2

样例输入 #2

3
1 2 3

样例输出 #2

0

样例 #3

样例输入 #3

6
2 1 4 3 6 5

样例输出 #3

3
A 1
A 3
A 5

提示

  • 2  N  400 2\ \leq\ N\ \leq\ 400
  • 1  Pi  N (1  i  N) 1\ \leq\ P_i\ \leq\ N\ \,(1\ \leq\ i\ \leq\ N)
  • Pi  Pj (1  i < j  N) P_i\ \neq\ P_j\ \,(1\ \leq\ i\ <\ j\ \leq\ N)
  • 输入均为正数
4
3 2 4 1
4
A 3
B 1
B 2
B 2
3
1 2 3
0
6
2 1 4 3 6 5
3
A 1
A 3
A 5

提示

制約

  • 2  N  400 2\ \leq\ N\ \leq\ 400
  • 1  Pi  N (1  i  N) 1\ \leq\ P_i\ \leq\ N\ \,(1\ \leq\ i\ \leq\ N)
  • Pi  Pj (1  i < j  N) P_i\ \neq\ P_j\ \,(1\ \leq\ i\ <\ j\ \leq\ N)
  • 入力はすべて整数

Sample Explanation 1

この出力例では、P P は $ (3,2,4,1)\ \rightarrow\ (3,2,1,4)\ \rightarrow\ (1,2,3,4)\ \rightarrow\ (1,4,3,2)\ \rightarrow\ (1,2,3,4) $ の順に変わります。 操作回数の合計は最小でなくてもよいということに注意してください。