P13267 [GCJ 2014 Finals] Paradox Sort
题目描述
Vlad 喜欢糖果。你有一袋不同种类的糖果,你打算让 Vlad 最后保留其中一颗。你会为这批糖果指定一个出场顺序,然后依次将糖果一个接一个地递给 Vlad。Vlad 每次收到糖果时(第一颗除外),会将当前手里的糖果与新收到的糖果进行比较,保留他更喜欢的那一颗,把另一颗丢掉。
你可能会以为,无论你选择怎样的顺序,Vlad 最终都会留下他最喜欢的糖果。但事实并非如此!Vlad 不一定有明确的“最喜欢”糖果。我们知道,对于任意一对糖果,他总能做出选择,但这种偏好关系不一定构成一个一致的排名结构。比如:他可能在橘子和柠檬之间选择橘子,在香蕉和橘子之间选择香蕉,但又在柠檬和香蕉之间选择柠檬!
现在你有一个特别想让 Vlad 最后留下的糖果。已知 Vlad 对每对糖果的偏好,请你判断是否存在一种糖果顺序,使得 Vlad 最终会留下你指定的那一颗。如果存在,请找出按字典序排列的最小的那一种顺序。
输入格式
输入的第一行为测试用例个数 $\mathrm{T}$。
接下来是 $\mathrm{T}$ 个测试用例,每个测试用例包含如下内容:
- 第一行包含两个整数 $\mathrm{N}$ 和 $\mathrm{A}$,中间以空格分隔。$\mathrm{N}$ 表示糖果的总数,$\mathrm{A}$ 表示你希望 Vlad 最终留下的糖果编号(糖果从 $0$ 到 $\mathrm{N}-1$ 编号)。
- 接下来 $\mathrm{N}$ 行,每行包含 $\mathrm{N}$ 个字符。第 $i$ 行第 $j$ 个字符表示 Vlad 对第 $i$ 颗和第 $j$ 颗糖果的偏好:
- 若为 `'Y'`,表示 Vlad 更喜欢糖果 $i$;
- 若为 `'N'`,表示 Vlad 更喜欢糖果 $j$;
- 若为 `'-'`,表示 $i = j$,即同一颗糖果自身,无需比较。
保证当 $i \neq j$ 时,第 $i$ 行第 $j$ 个字符与第 $j$ 行第 $i$ 个字符不同。
输出格式
对于每个测试用例,输出一行,格式为 `"Case #x: "`($x$ 为测试用例编号,从 $1$ 开始),后接:
- 若不存在一种顺序能让 Vlad 最终保留糖果 $\mathrm{A}$,输出 `"IMPOSSIBLE"`;
- 否则,输出一个以空格分隔的糖果编号序列(表示字典序最小的有效顺序)。
说明/提示
## 限制条件
- $1 \leq \mathrm{T} \leq 100$
### Small 数据集(4 分)
- 时间限制:~~60~~ 3 秒
- $1 \leq \mathrm{N} \leq 10$
### Large 数据集(28 分)
- 时间限制:~~120~~ 5 秒
- $1 \leq \mathrm{N} \leq 100$
翻译由 ChatGPT-4o 完成