CF2118B.Make It Permutation

普及-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有一个大小为 $ n \times n $ 的矩阵 $ A $,其中对于所有 $ 1 \le i,j \le n ,, A_{i,j} = j $。

在一次操作中,你可以选择一行,并反转该行中的任意子数组∗^{\text{∗}}。

请找到最多 $ 2n $ 次操作的序列,使得每一列都包含一个长度为 $ n $ 的排列†^{\text{†}}。

可以证明这样的构造总是可能的。如果有多个解,输出任意一个即可。

∗^{\text{∗}} 数组 $ a $ 是数组 $ b $ 的子数组,如果 $ a $ 可以通过从 $ b $ 的开头删除零个或多个元素,以及从 $ b $ 的末尾删除零个或多个元素得到。

†^{\text{†}} 长度为 $ n $ 的排列是一个由 $ 1 $ 到 $ n $ 的 $ n $ 个不同整数按任意顺序组成的数组。例如,$ [2,3,1,5,4] $ 是一个排列,但 $ [1,2,2] $ 不是排列($ 2 $ 出现了两次),$ [1,3,4] $ 也不是排列($ n=3 $ 但出现了 $ 4 $)。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $ t (( 1 \le t \le 100 $)。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 $ n (( 3 \le n \le 5000 $),表示矩阵的行数和列数。

保证所有测试用例的 $ n $ 之和不超过 $ 5000 $。

输出格式

对于每个测试用例,第一行输出一个整数 $ k (( 0 \le k \le 2n $),表示你希望执行的操作次数。接下来的行中,输出这些操作。

每个操作的输出格式为“$ i;l;r ”(”( 1 \leq l \leq r \leq n $ 且 $ 1 \leq i \leq n $),表示反转第 $ i $ 行的子数组 $ A_{i, l} $, $ A_{i, l+1} $, ..., $ A_{i, r} $。

输入输出样例

  • 输入#1

    2
    3
    4

    输出#1

    4
    2 1 3
    2 2 3
    3 1 2
    3 2 3
    5
    2 1 4
    3 1 3
    3 2 4
    4 3 4
    4 1 2

说明/提示

在第一个测试用例中,以下操作是一个有效的解:

输入解题思路,AI测评打分。不知道怎么写?

首页