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$,达成要求。