【題解】SP23881 God of Nim

題意

傳送門

nn堆石子,第ii堆石子每次可以取的數量在[1,ki][1,k_i]間,問先手是否必勝。

分析

這顯然是一個NimNim遊戲的變種。

我們首先通過SGSG函數分析。一般這種由多個小狀態(每堆石子)組成的局面,都可以先單獨分析出每個小狀態的SGSG函數值,然後異或起來,最後得到整體局面的SGSG函數值。(抄一波博弈論課件)

那麼如果我們把每一堆石子單獨考慮,那麼SGSG函數就非常顯然了,如果第ii堆石子數量爲aia_i,那麼顯然它的SGSG函數爲aimod  (ki+1)a_i \mod (k_i+1)。因爲每一個狀態nn都可以轉移到[nki,n1][n-k_i,n-1],所以會產生長度爲ki+1k_i+1​的循環節~~(實在不行手動打表即可)~~。

於是只要求出每堆的SGSG函數,最後異或起來即可判斷是否必勝:異或和不爲00則必勝,否則必敗。

#include <bits/stdc++.h>
#define ll long long
using namespace std;

int n;
ll a[10005];

int main()
{
    int t;
    cin >> t;
    while(t--){
        cin >> n;
        for(int i = 1; i <= n; i++){
            scanf("%lld", &a[i]);
        }
        ll x, ans = 0;
        for(int i = 1; i <= n; i++){
            scanf("%lld", &x);
            ans ^= (a[i]%(x+1));
        }
        if(ans) puts("Amit");
        else puts("Mishra");
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章