CF1469D.Ceil Divisions

普及+/提高

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

You have an array a1,a2,…,ana_1, a_2, \dots, a_n where ai=ia_i = i.

In one step, you can choose two indices xx and yy (x≠yx \neq y) and set ax=⌈axay⌉a_x = \left\lceil \frac{a_x}{a_y} \right\rceil (ceiling function).

Your goal is to make array aa consist of n−1n - 1 ones and 11 two in no more than n+5n + 5 steps. Note that you don't have to minimize the number of steps.

你有一个数组 a1,a2,…,ana_1, a_2, \dots, a_n,其中 ai=ia_i = i。

每一步中,你可以选择两个下标 xx 和 yy(x≠yx \neq y),并将 axa_x 更新为 ⌈axay⌉\left\lceil \frac{a_x}{a_y} \right\rceil(向上取整函数)。

你的目标是在不超过 n+5n + 5 步内,使数组 aa 包含 n−1n - 1 个 11 和 11 个 22。注意:你无需最小化操作步数。

输入格式

The first line contains a single integer tt (1≤t≤10001 \le t \le 1000) — the number of test cases.

The first and only line of each test case contains the single integer nn (3≤n≤2⋅1053 \le n \le 2 \cdot 10^5) — the length of array aa.

It's guaranteed that the sum of nn over test cases doesn't exceed 2⋅1052 \cdot 10^5.

第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000)—— 测试用例的数量。

每个测试用例的第一行且唯一一行包含一个整数 nn(3≤n≤2⋅1053 \le n \le 2 \cdot 10^5)—— 数组 aa 的长度。

保证所有测试用例的 nn 之和不超过 2⋅1052 \cdot 10^5。

输出格式

For each test case, print the sequence of operations that will make aa as n−1n - 1 ones and 11 two in the following format: firstly, print one integer mm (m≤n+5m \le n + 5) — the number of operations; next print mm pairs of integers xx and yy (1≤x,y≤n1 \le x, y \le n; x≠yx \neq y) (xx may be greater or less than yy) — the indices of the corresponding operation.

It can be proven that for the given constraints it's always possible to find a correct sequence of operations.

对每个测试用例,输出将数组 aa 变为包含 n−1n - 1 个 11 和 11 个 22 的操作序列,格式如下:首先输出一个整数 mm(m≤n+5m \le n + 5),表示操作次数;接着输出 mm 对整数 xx 和 yy(1≤x,y≤n1 \le x, y \le n;x≠yx \neq y)(xx 可大于或小于 yy),表示每次操作所涉及的下标。

可以证明,在给定约束条件下,总存在一个合法的操作序列。

输入输出样例

  • 输入#1

    2
    3
    4

    输出#1

    2
    3 2
    3 2
    3
    3 4
    4 2
    4 2

说明/提示

In the first test case, you have array a=[1,2,3]a = [1, 2, 3]. For example, you can do the following:

  1. choose 33, 22: a3=⌈a3a2⌉=2a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2 and array a=[1,2,2]a = [1, 2, 2];
  2. choose 33, 22: a3=⌈22⌉=1a_3 = \left\lceil \frac{2}{2} \right\rceil = 1 and array a=[1,2,1]a = [1, 2, 1].

You've got array with 22 ones and 11 two in 22 steps.

In the second test case, a=[1,2,3,4]a = [1, 2, 3, 4]. For example, you can do the following:

  1. choose 33, 44: a3=⌈34⌉=1a_3 = \left\lceil \frac{3}{4} \right\rceil = 1 and array a=[1,2,1,4]a = [1, 2, 1, 4];
  2. choose 44, 22: a4=⌈42⌉=2a_4 = \left\lceil \frac{4}{2} \right\rceil = 2 and array a=[1,2,1,2]a = [1, 2, 1, 2];
  3. choose 44, 22: a4=⌈22⌉=1a_4 = \left\lceil \frac{2}{2} \right\rceil = 1 and array a=[1,2,1,1]a = [1, 2, 1, 1].

在第一个测试用例中,给定数组 a=[1,2,3]a = [1, 2, 3]。例如,你可以执行以下操作:

  1. 选择下标 33 和 22:令 a3=⌈a3a2⌉=2a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2,此时数组变为 a=[1,2,2]a = [1, 2, 2];
  2. 选择下标 33 和 22:令 a3=⌈22⌉=1a_3 = \left\lceil \frac{2}{2} \right\rceil = 1,此时数组变为 a=[1,2,1]a = [1, 2, 1]。

你仅用 22 步就得到了一个包含 22 个 11 和 11 个 22 的数组。

在第二个测试用例中,a=[1,2,3,4]a = [1, 2, 3, 4]。例如,你可以执行以下操作:

  1. 选择下标 33 和 44:令 a3=⌈34⌉=1a_3 = \left\lceil \frac{3}{4} \right\rceil = 1,此时数组变为 a=[1,2,1,4]a = [1, 2, 1, 4];
  2. 选择下标 44 和 22:令 a4=⌈42⌉=2a_4 = \left\lceil \frac{4}{2} \right\rceil = 2,此时数组变为 a=[1,2,1,2]a = [1, 2, 1, 2];
  3. 选择下标 44 和 22:令 a4=⌈22⌉=1a_4 = \left\lceil \frac{2}{2} \right\rceil = 1,此时数组变为 a=[1,2,1,1]a = [1, 2, 1, 1]。

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

首页