题目描述
题目名称:乘法模拟
这是一个只输出的题目,输入不会被给出。
简单来说,这是一个要求用比较 (x<y) 和加法 (x+y) 来模拟整数乘法的问题。没有输入,只需要输出操作序列。
假设有一个长度为 N 的长数组 a[0],a[1],…,a[N−1]。前两个元素的初始值为非负整数 A,B(你并不知道它们的值),其余元素的初始值为 0。你的目标是最终让 a[2] 等于乘积 A⋅B。
你可以执行两种形式的操作(这里,0≤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,…,0],并应用提交的操作序列来验证最终的 a[2] 是否等于 A⋅B。
输入格式
标准输入没有内容。
输出格式
在第 1 行输出操作次数。接下来,每行输出一个操作,可以是 + i j k 或 < i j k 的形式。
样例 1
输入
输出
4
< 0 1 8
+ 0 1 2
+ 2 8 2
+ 0 0 0
说明/提示
对于所有测试数据,满足:
- 0≤A,B≤109
- N=Q=2×105
- V=1019
部分分:
- 如果你的程序能通过 A,B≤10 的测试数据,你将得到 800 分。
- 其余的 1000 分只有通过所有测试数据才能获得。
样例一解释
输入案例 1 中,判定机制仅对 (A,B)=(2,3) 的组合验证了提交的操作序列。上述输出通过了该测试案例,过程如下:
- 一开始,a[0]=2,a[1]=3,a[2]=a[3]=…=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⋅B,达成要求。