python等のllではtleる。pypy2なら通るらしいが、私がpypy3で投げたときはだめだった。

No.351 市松スライドパズル

解法

逆からやればよい。$O(N)$。

実装

pythonはtleる。

#include <iostream>
#include <vector>
#define repeat(i,n) for (int i = 0; (i) < (n); ++(i))
#define repeat_reverse(i,n) for (int i = (n)-1; (i) >= 0; --(i))
using namespace std;
int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);
    int h, w; cin >> h >> w;
    int n; cin >> n;
    vector<char> s(n);
    vector<int> k(n);
    repeat (i,n) cin >> s[i] >> k[i];
    int y = 0, x = 0;
    repeat_reverse (i,n) {
        if (s[i] == 'R' and y == k[i]) {
            x = (x - 1 + w) % w;
        } else if (s[i] == 'C' and x == k[i]) {
            y = (y - 1 + h) % h;
        }
    }
    cout << (y % 2 == x % 2 ? "white" : "black") << endl;
    return 0;
}