yukicoder No.348 - マス埋めゲーム2

解法

列か行どちらかが埋まってしまった段階で最後に埋めた人の負けです. それを避けるために各プレイヤーが行動していくとすると, 最終的にH+W-2回ターンが進み, その次の人が負けることになります. Nで人が一回りすることを考えると結局, (H+W-2) \equiv k-1(mod\ N)を判定すればよいです.

ソースコード

#include <iostream>
using namespace std;

typedef long long ll;

ll H, W, N, K;

void Solve() {
    if ((H + W - 2) % N == K - 1) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }
}

int main() {
    cin >> H >> W >> N >> K;

    Solve();

    return 0;
}

感想

考え方自体は簡単だったけど式を考えるのがややこしかった.