题解:CF2155C The Ancient Wizards' Capes
此题解由 codeforces 官方题解翻译而来。
关键性质
假设哈利的列表至少对应一种斗篷安排。主要结论是:列表中任意两个连续值的差最多为 1。
分析
当哈利从位置
| 情况 | 巫师 |
巫师 |
说明 | |
|---|---|---|---|---|
| 1 | 左侧 | 左侧 | 巫师 |
|
| 2 | 右侧 | 右侧 | 巫师 |
|
| 3 | 左侧 | 右侧 | 两个巫师都保持可见 | |
| 4 | 右侧 | 左侧 | 巫师 |
结论
- 如果两个巫师以相同方式披斗篷,则列表中相应条目之间的差为
\pm 1。 - 如果两个巫师以不同方式披斗篷,则差为 0。
这决定了整个斗篷安排的一种唯一可能性(可能无效),该可能性仅基于巫师
因此,巫师斗篷的安排最多有两种可能。我们可以构建这两种安排,并检查它们是否与哈利的列表一致。
算法步骤
- 检查相邻
a_i 的差值是否都\leq 1 ,如果不是直接输出 0。 - 构建两种可能的斗篷安排:
- 方案1:巫师 1 披在左侧。
- 方案2:巫师 1 披在右侧。
- 根据差值规则填充后续巫师的斗篷方向。
- 验证每种方案是否与完整列表一致。
- 输出有效方案的数量。