AT_agc047_e [AGC047E] Product Simulation

题目描述

题目名称:乘法模拟 这是一个只输出的题目,输入不会被给出。 简单来说,这是一个要求用比较 $(x < y)$ 和加法 $(x + y)$ 来模拟整数乘法的问题。没有输入,只需要输出操作序列。 假设有一个长度为 $N$ 的长数组 $a[0], a[1], \ldots, a[N-1]$。前两个元素的初始值为非负整数 $A, B$(你并不知道它们的值),其余元素的初始值为 $0$。你的目标是最终让 $a[2]$ 等于乘积 $A \cdot B$。 你可以执行两种形式的操作(这里,$0 \leq i, j, k < N$): - `+ i j k`: 令 $a[k] = a[i] + a[j]$。 - `< i j k`: 令 $a[k] = a[i] < a[j]$。也就是说,如果 $a[i] < a[j]$,则 $a[k]$ 将为 $1$,否则 $a[k]$ 将为 $0$。 操作的次数最多为 $Q$ 次,并且在操作过程中,数组 $a$ 的元素不能超过 $V$。不过,指定的索引 $(i, j, k)$ 可以重复使用,而且可以重写数组中的任何元素(包括前两个元素)。值得注意的是,问题的判定机制会在单个测试案例中对多个 $(A, B)$ 的组合执行操作序列。每次,判定机制会选择 $A, B$ 的值生成数组 $a = [A, B, 0, 0, \ldots, 0]$,并应用提交的操作序列来验证最终的 $a[2]$ 是否等于 $A \cdot B$。

输入格式

标准输入没有内容。

输出格式

在第 $1$ 行输出操作次数。接下来,每行输出一个操作,可以是 `+ i j k` 或 `< i j k` 的形式。

说明/提示

对于所有测试数据,满足: - $0\leq A,B\leq {10}^9$ - $N=Q=2\times{10}^5$ - $V={10}^{19}$ 部分分: - 如果你的程序能通过 $A,B\leq 10$ 的测试数据,你将得到 $800$ 分。 - 其余的 $1000$ 分只有通过所有测试数据才能获得。 ### 样例一解释 输入案例 $1$ 中,判定机制仅对 $(A, B) = (2, 3)$ 的组合验证了提交的操作序列。上述输出通过了该测试案例,过程如下: - 一开始,$a[0] = 2$,$a[1] = 3$,$a[2] = a[3] = \ldots = a[N-1] = 0$。 - 操作 `< 0 1 8` 后,$a[0] < a[1]$ 成立,因此 $a[8] = 1$。 - 操作 `+ 0 1 2` 后,$a[2] = a[0] + a[1] = 5$。 - 操作 `+ 2 8 2` 后,$a[2] = a[2] + a[8] = 6$。 - 操作 `+ 0 0 0` 后,$a[0] = a[0] + a[0] = 4$。 - 最终,$a[2] = 6 = A \cdot B$,达成要求。