#P12417. 基础构造练习题 1

基础构造练习题 1

题目背景

2025.5.6:加强操作次数限制,并调整了部分分设计。

2025.5.8:再次加强操作次数限制,并调整了部分分设计。之前的提交记录已经全部重测。

题目描述

有一列实数,对于每一次操作,可以选择两个实数,把它们同时变为两数之积。

例如,给定 7,4,57, 4, 5,对 7755 进行一次操作,原数列变为 35,4,3535, 4, 35

给定数列的长度 nn,你的目标是找到一种操作方案,使得对于任意长度为 nn 的实数列,按照该操作方式操作之后,数列的每一项数值都相同。

输入格式

本题有多组测试数据。

第一行输入数据组数 TT

对于每组数据有一行,包含一个正整数 nn,表示数列长度。

输出格式

对于每组数据,先输出一个整数表示能否找到。若能输出 11,否则输出 00

若能找到,还需要输出一行 mm 表示操作次数(你需要保证 0m5×1050 \leq m \leq 5 \times 10^5),接下来 mm 行,每行包含两个整数,表示操作的两项在数列中的编号。

3
2
3
4
1
1
1 2
0
1
4
1 2
3 4
1 3
2 4

提示

Idea:Milmon,Solution:Milmon & _fewq,Code:Milmon & _fewq,Data:Milmon,Check:Konata28。

对于所有测试数据,保证 T=20T = 202n2102 \leq n \leq 2^{10}。本题共包含 33 个子任务:

子任务编号 分值 测试点数目
11 1010 11
22 3030
33 6060 33

对于子任务 1,选手只需要正确回答是否存在操作方案即可获得满分。

对于子任务 2,对于每组测试数据分别计分:对于一组测试数据,只要选手正确回答是否存在操作方案,并且给出的操作方案均合法,就可以得到该测试点 5%5 \% 的分数。选手在该测试点得到的分数等于每组测试数据得分的总和。

对于子任务 3:

  • 若存在一组测试数据,选手没有正确回答是否存在操作方案,或者给出的操作方案不合法,那么选手在该测试点不得分;

  • 否则,若对于所有存在操作方案的测试数据,选手都给出了操作次数不超过 2n12n - 1 的方案,那么选手在该测试点得到全部分数;

  • 否则,设所有存在操作方案的测试数据中选手给出的最大操作次数为 ss,定义函数:

    f(x)=2×107(x+4000)0.7f(x) = \frac{2 \times 10^7}{(x + 4\,000)^{0.7}}

    则选手在该测试点的得分为:

    $$\frac{f(s) - f(500\,000)}{f(2\,047) - f(500\,000)} \times 55 $$

    下表为在一些特殊的 ss 中选手在该测试点得到的分数:

    s=s = 选手得分
    500000500\,000 00
    400000400\,000 0.4360.436
    300000300\,000 1.1061.106
    200000200\,000 2.3022.302
    100000100\,000 5.2585.258
    5000050\,000 9.8369.836
    1000010\,000 29.40229.402
    50005\,000 41.00341.003
    30003\,000 49.39149.391
    20472\,047 5555

提示:若能够完成正确性判断,但是无法完成构造的,也需要按照输出格式输出,例如你可以输出一个 m=0m = 0 的构造。类似地,输出时请判定 0m5×1050 \leq m \leq 5 \times 10^5 是否成立,若评分时存在一组数据的 m>5×105m > 5 \times 10^5,则你无法得到任何分数。