#P16577. [Euc2024]Funny or Scary?

[Euc2024]Funny or Scary?

题目描述

你正在设计一款新游戏。游戏中有 nn 个场景,玩家可以按任意顺序游玩,但每个场景必须恰好游玩一次。

当玩家从一个场景切换到另一个场景时,游戏会播放一段专门制作的过渡视频,使所有场景看起来像一个完整故事。过渡视频只取决于两个场景的无序对:从场景 aa 切换到场景 bb,与从场景 bb 切换到场景 aa,播放的是同一段视频。

因此,一共需要制作

n(n1)2\frac{n(n-1)}2

段不同的过渡视频。

每段视频可以是搞笑的(F),也可以是恐怖的(S)。连续看到太多同一类型的视频会很无聊,因此你希望完成所有视频的类型设计,使得:

无论玩家以何种顺序游玩这 nn 个场景,都不会连续看到超过

3n4\left\lceil\frac{3n}{4}\right\rceil

段同一类型的过渡视频。

你已经为至多 n2\left\lfloor\dfrac n2\right\rfloor 段视频确定了类型。请为其余视频选择类型,使上述要求成立。

输入格式

第一行包含一个整数 nn2n242\le n\le 24),表示场景数量。

接下来 nn 行描述当前的部分方案,每行包含 nn 个字符。第 ii 行第 jj 个字符表示场景 ii 与场景 jj 之间的过渡视频:

  • F:已经确定为搞笑视频;
  • S:已经确定为恐怖视频;
  • ?:尚未确定;
  • .i=ji=j

保证矩阵关于主对角线对称,即第 ii 行第 jj 个字符与第 jj 行第 ii 个字符相同。

保证至多有 n2\left\lfloor\dfrac n2\right\rfloor 条无向边已经确定。由于每条边在矩阵中出现两次,因此输入中 FS 字符的总数至多为 2n22\left\lfloor\dfrac n2\right\rfloor

输出格式

输出 nn 行完整方案,每行包含 nn 个字符。

ii 行第 jj 个字符必须满足:

  • i=ji=j,输出 .
  • 否则输出 FS
  • 输入中原本为 ? 的位置必须替换为 FS
  • 输入中已经确定的字符不得改变;
  • 输出矩阵必须关于主对角线对称。

此外,对于 nn 个场景的任意排列,按该顺序游玩时,相邻场景间对应的视频序列中,连续相同类型的视频数量不得超过

3n4.\left\lceil\frac{3n}{4}\right\rceil.

若有多种方案,输出任意一种。可以证明,对所有满足约束的输入,答案一定存在。

样例 1

输入

5
.?F??
?.???
F?.S?
??S.?
????.

输出

.FFFF
F.FFF
FF.SF
FFS.F
FFFF.

说明

允许连续出现的同类视频数量为

354=4.\left\lceil\frac{3\cdot 5}{4}\right\rceil=4.

任意排列只会产生 44 段过渡视频,因此只需保证不修改已经确定的类型即可。

样例 2

输入

12
.???????????
?.??????????
??.?????????
???.????????
????.???????
?????.??????
??????.?????
???????.????
????????.???
?????????.??
??????????.?
???????????.

输出

.SSSFFSSSSFS
S.SFFSFSFFFS
SS.SFFFSSSFS
SFS.FFSSSSFS
FFFF.FFFFFSF
FSFFF.SFFSFF
SFFSFS.SSSFS
SSSSFFS.SSFS
SFSSFFSS.SFS
SFSSFSSSS.FS
FFFFSFFFFF.F
SSSSFFSSSSF.

说明

例如排列

1 7 4 12 9 8 2 6 10 3 11 5

对应的视频类型序列为 SSSSSSSSSFS。虽然其中共有 1010S,但最长连续段只有 99 个,恰好不超过

3124=9.\left\lceil\frac{3\cdot12}{4}\right\rceil=9.