uva1482 - Playing With Stones

链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4228

题解

Sprague-Grundy定理 组合游戏和的 S G SG SG函数等于各游戏 S G SG SG函数的 N i m Nim Nim和(即异或和)
这题的关键在于求出每个组合游戏的 S G SG SG函数
打表发现,偶数位置的 S G ( x ) = x 2 SG(x)=\frac{x}{2} SG(x)=2x,而奇数位置 S G ( x ) = S G ( ⌊ x 2 ⌋ ) SG(x)=SG(\lfloor\frac{x}{2}\rfloor) SG(x)=SG(2x)

代码

//SG定理 
#include <stdio.h>
#define maxn 110
#define ll long long
ll read()
{
	ll x=0, c, f=1;
	for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-48;
	return f*x;
}
ll N;
ll sg(ll x){return (x&1)==0?x>>1:sg(x>>1);}
int main()
{
	ll i, nim_sum=0, T;
	T=read();
	while(T--)
	{
		N=read();
		nim_sum=0;
		for(i=1;i<=N;i++)nim_sum^=sg(read());
		if(nim_sum==0)printf("NO\n");
		else printf("YES\n"); 
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值