PS

BOJ 11694 : 님 게임

lickelon 2024. 9. 6. 16:02

태그 : 게임이론, 스프라그 그런디


코드

#include <bits/stdc++.h>

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n;
    int ans = 0;
    bool flag = false;
    cin >> n;
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        ans ^= a;
        if(a>1) flag = true;
    }

    if(flag) cout << (ans ? "koosaga" : "cubelover");
    else cout << (!ans ? "koosaga" : "cubelover");

    return 0;
}

풀이

마지막에 행동을 하는 사람이 이기는 님 게임에서는 nim sum이 0일때 후공이 이긴다.

마지막에 행동을 하는 사람이 지는 님 게임은 nim sum이 0일 때 임의의 돌 무더기를 추가하거나 0일 아닐 때 0이 되도록 만드는 돌 무더기를 추가하여 변형할 수 있다. 이 경우 nim sum은 뒤집히게 되며 기존의 nim sum이 0이라면 선공이 이기는 것을 알 수 있다.

모든 돌무더기에 돌의 수가 1개인 경우 예외처리를 해주어야 한다.

'PS' 카테고리의 다른 글

BOJ 1572 : 중앙값  (1) 2024.09.08
BOJ 1725 : 히스토그램  (2) 2024.09.07
BOJ 1989 : 부분배열 고르기 2  (1) 2024.09.05
BOJ 2104 : 부분배열 고르기  (1) 2024.09.04
BOJ 6549 : 히스토그램에서 가장 큰 직사각형  (1) 2024.09.03