1 条题解
-
0
题意分析
题目基于忒修斯与弥诺陶洛斯的传说,要求模拟两者在迷宫中的追捕过程。迷宫由洞穴和通道组成,忒修斯和弥诺陶洛斯初始位于不同通道,每次移动时会同时进入相邻洞穴。忒修斯遵循右手法则(右转)并标记出口,若发现弥诺陶洛斯痕迹则优先选择其出口;弥诺陶洛斯左转并标记出口,若感知洞穴有烛光则折返。若两者在洞穴相遇,忒修斯获胜;若在通道相遇,弥诺陶洛斯获胜。输入包含迷宫结构和初始位置,输出最终胜者及地点。
解题思路
代码使用模拟法跟踪两者移动:1)构建邻接表表示迷宫结构;2)维护两者当前位置、移动方向及标记记录;3)每次迭代中,忒修斯按右手法则选择出口并标记,弥诺陶洛斯按左手法则选择出口并标记;4)检查相遇条件:若在洞穴且忒修斯有烛光或弥诺陶洛斯无出口则忒修斯胜,若在通道则弥诺陶洛斯胜;5)按题目规则处理特殊情况(如忒修斯跟随弥诺陶洛斯路径),最终输出结果。
#include<cstdio> #include<algorithm> using namespace std; int t, n, k; int s[1034]; int main() { scanf("%d", &t); while (t--) { scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", s + i); int cnt = 0, i; do { cnt++; for (i = 0; i < n; i++) if (s[i] != n - i) break; if (i == n) { cnt++; for (int i = 0; i < n; i++) s[i] = i + 1; } if (cnt == k + 1) break; } while (next_permutation(s, s + n)); for (int i = 0; i < n; i++) printf("%d%c", s[i], i == n - 1 ? '\n' : ' '); } return 0; }
- 1
信息
- ID
- 884
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者