把每个位置 $i$ 看成二维平面上的点 $(i, p_i)$。那么递增三元组对应一条向右上走的折线,递减三元组对应一条向右下走的折线。
如果整个点集 关于中心旋转 90° 后与自身重合,那么两类三元组数量自然相等。
最简单的方法是「回」字形嵌套,为满足排列要求,将每一层 4 个点(左上、左下、右上、右下)组成的「口」字形向右微微旋转小角度。
- $N \bmod 4 = 0$:全部由「回」字框嵌套组成,完美旋转对称。
- $N \bmod 4 = 1$:在「回」的正中心放 $1$ 个点,依然完美旋转对称。
- $N \bmod 4 = 2$:不能做到整个图形对称,但我们只需要满足局部旋转重合,只需在最左侧(最左上角、最左下角)添加 $2$ 个点。
- $N \bmod 4 = 3$:在 $N \bmod 4 = 2$ 的基础上,正中心再放 $1$ 个点。
形式化地,
- 中心点:若 $N$ 为奇数,放入 $0$,更新 $N \leftarrow N - 1$
- 每层放 4 个点,循环执行:压入队首 $x+1$(左上点)、$-x$(左下点),压入队尾 $-(x+1)$(右下点)、$x$(右上点),并更新 $x \leftarrow x + 2$,$N \leftarrow N - 4$
- 补 2 点:若最后剩余 $N = 2$,压入队首 $x+1$(左上点)与 $-x$(左下点)
- 最后,将元素离散化并输出