P15572 [USACO26FEB] Swap to Win B
题目描述
农夫约翰有一个他最喜欢的字符串 $t$,长度为 $M$ 个字符。他还有 $N$ 个字符串 $s_1, s_2, \ldots, s_N$,每个长度也都是 $M$ 个字符($1 \leq N, M \leq 1000$)。
FJ 可以执行以下两种类型的操作:
- FJ 选择任意一个字符串 $s_x$ 和两个下标 $p, q$。然后,他交换 $s_x$ 的第 $p$ 个和第 $q$ 个字符($1\le x\le N, 1\le p,q\le M$)。
- FJ 选择两个字符串 $s_x$ 和 $s_y$ 以及一个下标 $k$。然后,他交换 $s_x$ 和 $s_y$ 的第 $k$ 个字符($1\le x,y\le N, 1\le k\le M$)。
他的目标是使 $s_1$ 等于 $t$。请找出任意一系列操作来实现他的目标。由于 FJ 很着急,他总共只有时间执行 $2M$ 次操作。输入保证可以实现 FJ 的目标。
输入格式
第一行包含 $T$($1\le T\le 10$),表示独立测试用例的数量。每个测试用例按以下格式给出:
第一行包含 $N$ 和 $M$。
第二行包含 $t$。
接下来 $N$ 行,第 $i$ 行包含 $s_i$。
输入保证可以实现 FJ 的目标。所有字符串仅包含小写英文字母(a-z)。
输出格式
每个测试用例的输出格式如下:
第一行输出一个整数 $K$,表示你将执行的操作次数。$K$ 必须是一个非负整数,且不超过 $2M$。
接下来输出 $K$ 行,按顺序表示你将执行的操作。每行应为以下格式之一:
- 1 x p q
- 2 x y k
说明/提示
根据第一个测试用例的输出,$s$ 的变化过程如下(被交换的字母用大写表示):
```
nabana Babana baNaBa banaNa
banana -> Nanana -> nanana -> nanaBa
nnbaaa nnbaaa nnbaaa nnbaaa
```
在执行完所有三个操作后,$s_1=t$。
### 评分标准
- 输入 2-6:$N, M \le 100$
- 输入 7-12:无额外限制。
题目来源:Chongtian Ma
翻译由 DeepSeek 完成