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");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值