CF1469D Ceil Divisions

题目描述

你有一个数组 $a_1, a_2, \dots, a_n$,其中 $a_i = i$。 每一步,你可以选择两个下标 $x$ 和 $y$($x \neq y$),并将 $a_x$ 赋值为 $\left\lceil \frac{a_x}{a_y} \right\rceil$(向上取整函数)。 你的目标是在不超过 $n+5$ 步内,使数组 $a$ 变为 $n-1$ 个 $1$ 和 $1$ 个 $2$。注意,你不需要使操作步数最小。

输入格式

第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($3 \le n \le 2 \cdot 10^5$),表示数组 $a$ 的长度。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一组操作序列,使得数组 $a$ 变为 $n-1$ 个 $1$ 和 $1$ 个 $2$。输出格式如下:首先输出一个整数 $m$($m \le n+5$),表示操作次数;接下来输出 $m$ 行,每行两个整数 $x$ 和 $y$($1 \le x, y \le n$,$x \neq y$),表示每次操作选择的下标。 可以证明,在给定的约束下,总能找到一种合法的操作序列。

说明/提示

在第一个测试用例中,初始数组 $a = [1, 2, 3]$。例如,你可以这样操作: 1. 选择 $3, 2$:$a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2$,此时数组 $a = [1, 2, 2]$; 2. 选择 $3, 2$:$a_3 = \left\lceil \frac{2}{2} \right\rceil = 1$,此时数组 $a = [1, 2, 1]$。 你在 $2$ 步内得到了 $2$ 个 $1$ 和 $1$ 个 $2$。 在第二个测试用例中,$a = [1, 2, 3, 4]$。例如,你可以这样操作: 1. 选择 $3, 4$:$a_3 = \left\lceil \frac{3}{4} \right\rceil = 1$,此时数组 $a = [1, 2, 1, 4]$; 2. 选择 $4, 2$:$a_4 = \left\lceil \frac{4}{2} \right\rceil = 2$,此时数组 $a = [1, 2, 1, 2]$; 3. 选择 $4, 2$:$a_4 = \left\lceil \frac{2}{2} \right\rceil = 1$,此时数组 $a = [1, 2, 1, 1]$。 由 ChatGPT 4.1 翻译