P1563. 玩具谜题
考点
- 模拟
题解
1 |
|
思路
每个人都有朝向和名字,自然用结构体Node
来保存
根据题意得知,结构体数组的下标从小到大遍历是为逆时针序,从大到小遍历是为顺时针序
朝内圈记为0,朝外圈记为1;向左走记为0,向右走记为1
接下来分析遍历走向:
- 朝内圈的小人向左走,是为顺时针,有
0 ^ 0 = 0
- 朝内圈的小人向右走,是为逆时针,有
0 ^ 1 = 1
- 朝外圈的小人向左走,是为逆时针,有
1 ^ 0 = 1
- 朝外圈的小人向右走,是为顺时针,有
1 ^ 1 = 0
所以每次判断遍历走向时,将当前所处的小人内外圈方向与左右方向异或即可;为0则从大到小遍历,为1则从小到大遍历
假设当前共n=6
个数,下标idx
范围为0~5
,每次需要走len
步;且题目规定len
小于n
从小到大遍历可以得到公式:\(idx=\left( idx+len \right) \%n\)
从大到小遍历可以得到公式:\(idx=\left(
idx-len+n \right)
\%n\),之所以加上n
是处理负数时的情况