横版场域论:题解¶
出题人解法:根据朝向确定符号,用模运算维护当前位置。Codex(GPT-6)整理读入、取模边界及正确性说明。
方向换算¶
内部将同学编号、朝向和标签数组均改为零起始下标,当前位置记为 \(c\) .背对观察者时,自己的右方是编号增加方向;面对观察者时,自己的左方是编号增加方向。因此,当 \(d\ne f_c\) 时向编号增加方向走,否则向编号减小方向走。
先令 \(r=p\bmod N\) .正向转移为 \(c\leftarrow(c+r)\bmod N\) ;反向转移为 \(c\leftarrow(c-r+N)\bmod N\) .因为 \(0\le c,r<N\) ,反向取模前已经非负。每次转移后输出对应标签,下一次使用新持有者的朝向。
绕行一整圈不改变持有者,因此用余数代替步数保持结果。方向换算恰好反映面对和背对两种情况。由初始持有者为一号开始归纳,每次转移后保存的下标都是真正的持有者,输出因而正确。
复杂度与其他方案¶
读取资料时间 \(O(N)\) ,每次操作 \(O(1)\) ,总时间 \(O(N+M)\) ,空间 \(O(N)\) .零步、整圈和单人队列均由同一公式处理。
逐步模拟耗时 \(O(N+\sum p)\) ,可用于小规模验证,但没有空间优势;双向链表逐步行走也有相同缺点。预存每位同学的左右符号只是同一公式的表示变化,因此不额外列为独立解法。程序见 std.cpp。