T183640 止战之殇(2021 CoE III D)
题目背景
> 孩子们眼中的希望 是什么形状
> 是否醒来有面包当早餐 再喝碗热汤
> 农夫被烧毁土地跟村庄 终于拿起枪
> 她却慢慢习惯放弃了抵抗
> 孩子们眼中的希望 是什么形状
> 是否院子有秋千可以荡 口袋里有糖
> 刺刀的光被仇恨所擦亮 在远方野蛮
> 而她却微笑着不知道慌张
> ——《止战之殇》
题目描述
有 $n$ 个因为战争而历尽苦难的孩子,他们想要终止野蛮的战争。他们每人要选定一个整数作为自己的 **天真值**,第 $i$ 个孩子的 **天真值** 为 $a_i$,**天真值** 可以为负数。然后他们每次会选择两个孩子 $x,y$ 一起进行一次值为正整数 $k$ 的 **祈祷**,直到每人都进行了 $n-1$ 次 **祈祷**。一次由两个 **天真值** 分别为 $a_x$ 和 $a_y$ 的孩子一起进行一次值为 $k$ 的 **祈祷** 能够产生两个值分别为 $a_x+k$ 和 $a_y+k$ 的 **殇歌**。显然进行完所有 **祈祷** 后会产生 $n(n-1)$ 个 **殇歌**。如果这些 **殇歌** 的值 **恰好** 为 $1$ 到 $n(n-1)$ 的正整数 **各一个**,那么整个过程为一次 **止战之殇**,可以终止血腥的战争。现在孩子们想要知道他们怎样选择自己的 **天真值** 和每次 **祈祷** 的值才能制造出 **止战之殇**,由于他们还太小,所以就请你帮助他们。
#### 题意简述
给定 $n$,构造一个长度为 $n$ 的整数列 $a_1,\ a_2,\ \dots,\ a_n$ 与 $\dfrac{n(n-1)}{2}$ 个整数三元组 $(x_i,\ y_i,\ k_i),x_i \neq y_i, \ k_i \in \mathbb{Z_+}$,使得 $\forall j \in \{1,\ 2,\ \dots,\ n\}$,均有
$$\sum_{i=1}^{\frac{n(n-1)}{2}}((x_i=j) + (y_i=j))=n-1$$
且 $\left\{c \ | \ c =a_{x_i}+k_i, \ i=1,2,\cdots,\frac{n(n-1)}{2}\right\}\cup\left\{d \ | \ d =a_{y_i}+k_i, \ i=1,2,\cdots,\frac{n(n-1)}{2}\right\}=\{1,2,\cdots,n(n-1)\}$。
输入格式
一行 $3$ 个整数 $n,\ op_1,\ op_2$。
如果 $op_1=1$,那么必须满足每一对 $1 \le x
输出格式
如果有解,第一行输出 $n$,否则输出 $-1$。
如果有解,第二行输出 $n$ 个非负整数表示编号为 $1$ 到 $n$ 的孩子分别的 **天真值**,接下来 $\dfrac{n(n-1)}{2}$ 行每行输出第 $i$ 次 **祈祷** 选定的 $x_i,\ y_i,\ k_i$。
说明/提示
#### 样例解释
对于第一组样例,最后没有生成任何 **殇歌**,满足要求。
对于第二组样例,$0+2=2,-1+2=1$,恰好为 $1$ 到 $2$ 各一个。
对于第三组样例,可以发现没有满足条件的方法。
对于第四组样例,有
$$5+7=12,0+7=7,5+1=6,3+1=4,2+7=9,3+7=10,$$
$$2+6=8,5+6=11,3+2=5,0+2=2,0+1=1,2+1=3,$$
恰好为 $1$ 到 $12$ 各一个。
------------
#### 数据范围
本题共有 $20$ 个数据点,每个数据点 $5$ 分,各个数据点的数据范围与限制如下。
| Testdata No. | $n \le$ | $op_1$ | $op_2$ | 特殊限制 |
| :-: | :-: | :-: | :-: | :-: |
| $1 \sim 4$ | $300$ | $0$ | $1$ | $n$ 为偶数 |
| $5 \sim 10$ | $300$ | $0$ | $1$ | $n$ 为奇数 |
| $11 \sim 17$ | $3 \times 10^3$ | $1$ | $1$ | 无 |
| $18 \sim 20$ | $7$ | $0$ | $0$ | 无 |
对于 $100\%$ 的数据,$1 \le n \le 3 \times 10^3$,$op_1,op_2 \in \{0,1\}$。
------------
#### 提示
本题提供 [$\texttt{Special Judge}$ 源码](https://www.luogu.com.cn/paste/h4pwri6z) 和 `checker.exe`,使用方法为:
命令行在目标文件夹输入指令:
```
checker.exe input.txt output.txt output.txt
```
其中 `input.txt` 是输入数据文件,`output.txt` 是程序运行结果文件。观察评判结果即可。
- `Accepted.` 表示答案正确。
- `ax equals to ay.` 表示 $a_x$ 与 $a_y$ 相等。
- `Misjudgment of the existence of the answer.` 表示有解性判断不正确。
- `Negative ai.` 表示 $a_i$ 为负数($op2=1$ 时)。
- `Invalid (x,y,k) No.i.` 表示 $x_i$ 或 $y_i$ 不在 $[1,n]$ 中或 $x_i=y_i$ 或 $k_i$ 不为正整数。
- `Invalid sum No.i.` 表示 $a_{x_i}+k_i$ 或 $a_{y_i}+k_i$ 不在 $[1,n(n-1)]$ 中。
- `Sum No.i already appeared.` 表示 $a_{x_i}+k_i$ 或 $a_{y_i}+k_i$ 已经出现过。
- `(x,y) No.i already appeared.` 表示 $(x_i,y_i)$ 已经出现过($op_1=1$ 时)。
- `x/y No.i appeared more than n-1 times.` 表示 $x_i$ 或 $y_i$ 出现了超过 $n-1$ 次。
**请务必保证输出格式正确**,否则 $\texttt{Special Judge}$ 可能会返回 $\texttt{Unknown Error}$ 等不可预估的结果。