AT_ttpc2022_o Parallel Processing
题目描述
### 简要问题描述
有一个神秘的幺半群 $(M, \oplus)$,并且有 $4$ 个可以执行该运算的 CPU。
给定一个整数 $N$,请你使用 $4$ 路并行计算 $M$ 的序列 $A = (A_1, A_2, \ldots, A_N)$ 的累积 $\oplus$,并使操作次数最小化。
### 严格问题描述
给定一个整数 $N$。请你按照以下(自定义语言的)规范编写程序,并且使指令数最小。
#### 程序规范
本程序可以处理 $2004$ 个变量 $A[1], A[2], \ldots, A[2000], C_1, C_2, C_3, C_4$。每个变量都持有一个整数序列。其中 $A[i]$($1 \leq i \leq 2000$)的初值为 $A[i] = (i)$。
($(i)$ 表示仅含 $i$ 的整数序列。)
程序运行结束时,必须满足以下条件:
- 对于每个 $i = 1, 2, …, N$,均有 $A[i] = (1, 2, …, i)$。
#### 程序格式
第 $1$ 行为指令数 $L$ 的整数。
第 $2$ 行到第 $4L+1$ 行依次写出 $L$ 条指令,每条指令占 $4$ 行,依次执行。
每条指令由 $12$ 个整数 $c_1, a_1, b_1, c_2, a_2, b_2, c_3, a_3, b_3, c_4, a_4, b_4$ 组成。所有数均为 $1$ 到 $2000$ 之间的整数。
每条指令依次执行以下步骤:
1. 将 $\text{concat}(A[a_1], A[b_1])$ 赋值给 $C_1$;
2. 将 $\text{concat}(A[a_2], A[b_2])$ 赋值给 $C_2$;
3. 将 $\text{concat}(A[a_3], A[b_3])$ 赋值给 $C_3$;
4. 将 $\text{concat}(A[a_4], A[b_4])$ 赋值给 $C_4$;
5. 将 $C_1$ 赋值给 $A[c_1]$;
6. 将 $C_2$ 赋值给 $A[c_2]$;
7. 将 $C_3$ 赋值给 $A[c_3]$;
8. 将 $C_4$ 赋值给 $A[c_4]$。
其中,$\text{concat}(x, y)$ 表示将整数序列 $x$、$y$ 依次连接而成的新整数序列。
输入格式
输入通过标准输入给出,格式如下:
> $N$
输出格式
设指令数的最小值为 $L$,输出格式如下:
> $L$ $\text{op}_1$ $\text{op}_2$ $\vdots$ $\text{op}_L$
其中,$\text{op}_i$($1 \leq i \leq L$)表示第 $i$ 次指令,格式如下:
> $c_1$ $a_1$ $b_1$ $c_2$ $a_2$ $b_2$ $c_3$ $a_3$ $b_3$ $c_4$ $a_4$ $b_4$
每个整数都必须在 $1$ 到 $2000$ 之间。
说明/提示
### 部分分
- 对所有满足 $2 \leq N \leq 16$ 的数据集,答对可以获得 $200$ 分。
- 对所有满足 $17 \leq N \leq 10^3$ 的数据集,答对可以获得 $300$ 分。
### 样例解释 1
第 $1$ 条指令后,$A[2]$ 变为 $(1, 2)$,$A[2000]$ 变为 $(2000, 2000)$。
结束时 $A[1] = (1), A[2] = (1, 2)$,满足要求。
### 样例解释 2
第 $1$ 条指令后,$A[2]$ 变为 $(1, 2)$,$A[4]$ 变为 $(3, 4)$,$A[2000]$ 变为 $(2000, 2000)$。
第 $2$ 条指令后,$A[3]$ 变为 $(1, 2, 3)$,$A[4]$ 变为 $(1, 2, 3, 4)$,$A[2000]$ 变为 $(2000, 2000, 2000, 2000)$。
最后 $A[1] = (1), A[2] = (1, 2), A[3] = (1, 2, 3), A[4] = (1, 2, 3, 4)$,满足要求。
### 数据范围
- $N$ 为整数;
- $2 \leq N \leq 10^3$。
由 ChatGPT 5 翻译