题解:P1563 [NOIP2016 提高组] 玩具谜题

· · 题解

solution

一道小模拟。

对于一个人 i,记 A_i 表示 i 的朝向,分类讨论(1n 特殊考虑)。

对于一组询问 as,减的情况就是当前位置朝内向左找或当前位置朝外向右找,A_i=0a=0A_i=1a=1,即 A_i=a 时减,那反过来不相等就加。

加减后再对 n 取模,要特判取模后位置为 0 的情况。

code

#include <bits/stdc++.h>
using namespace std;
int n, m, a[100005], now=1;
string b[100005];
int main () {
    cin >> n >> m;
    for (int i=1; i<=n; ++i) 
        cin >> a[i] >> b[i];
    for (int x, s; m--; ) 
        cin >> x >> s,
        now=(now+(a[now]==x?-s:s)+n)%n,
        now=(!now?n:now);
    cout << b[now];
    return 0;
}