HDU 3032 Nim or not Nim? (SG函數應用)

題目大意:
與一般的尼姆博弈不同之處在於,每一堆石子你可以進行的操作是,你可以將其分成兩堆,並且兩堆的個數可以不同。
這邊求出SG函數,然後異或判斷是奇異局勢就可以了。
這邊因爲範圍比較大,所以SG函數的求法是推出來的。多寫幾組就可以了。
最近剛開始研究SG函數,所以這題也是看別人的題解,說不上怎麼推出SG函數的公式,更多的解釋,大家可以去看大神的解釋。
這邊
SG(4k)=4k-1;
SG(4k+1)=4k+1;
SG(4k+2)=4k+2;
SG(4k+3)=4k+4;
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	int n;
	int t;
	cin >> t;
	while (t--)
	{
		scanf("%d", &n);
		int x, ans = 0;
		for (int i = 0; i < n; i++)
		{
			scanf("%d", &x);
			if (x % 4 == 0)
				ans ^= (x - 1);
			else
			if (x % 4 == 1 || x % 4 == 2)
				ans ^= x;
			else
				ans ^= (x + 1);
		}
		if (ans == 0)
			puts("Bob");
		else
			puts("Alice");
	}
}

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