CF1063E Lasers and Mirrors

题目描述

Oleg 来参观镜子迷宫。这个迷宫是一个 $n \times n$ 的房间,每个格子要么是空的,要么包含一面连接该格子对角线的镜子。迷宫中的镜子能够完美反射光线,这会产生有趣的视觉效果,也让人在迷宫中容易迷失方向。 Oleg 很好奇,于是在迷宫的南墙上安装了 $n$ 个激光器,朝向迷宫内部。在北墙上,Oleg 安装了 $n$ 个接收器,也朝向迷宫内部。我们将激光器和接收器从西到东编号,编号为 $1$ 到 $n$。每个激光器会发射一种特定类型的光束,编号为 $a_i$ 的接收器应该接收到编号为 $i$ 的激光器发射的光束。由于两束激光不能同时到达同一个接收器,这些编号构成了一个排列——每个接收器编号恰好出现一次。 你和 Oleg 一起来到了迷宫。请帮助他在初始为空的迷宫中放置镜子,使得最多数量的激光束能够到达它们应该到达的接收器。如果激光束离开了迷宫,就无法再返回,因为迷宫外没有镜子。

输入格式

第一行包含一个整数 $n$($1 \le n \le 1000$),表示迷宫的大小。 第二行包含一个长度为 $n$ 的排列 $a_i$($1 \le a_i \le n$),其中 $a_i$ 表示编号为 $i$ 的激光器应该到达的接收器编号。

输出格式

第一行输出最多有多少束激光能够到达它们应该到达的接收器。 接下来 $n$ 行,每行长度为 $n$,输出镜子的摆放方案,使得有这么多激光束能够正确到达接收器。如果对应的格子为空,输出“.”,否则输出“/”或“\”,表示镜子的朝向。 输出时,北方在上,南方在下,西方在左,东方在右。 允许激光束到达非对应的接收器,但这些不计入答案。 如果有多种镜子摆放方案都能达到最优答案,输出任意一种即可。

说明/提示

下图展示了第一个样例中镜子的摆放方式。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1063E/19ee8b9d2f31cec8a8e7ae55db512ff2fc59d36c.png) 由 ChatGPT 4.1 翻译