Anti-Nim
地上有n堆石子(每堆石子数量小于10000),
每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。
每次只能从一堆里取。谁取走最后一刻谁输。
假如甲是先手,且告诉你这n堆石子的数量,他想知道是否存在先手必胜的策略
定义使人快乐
孤单堆:一堆火柴仅有1根火柴
充裕堆:一堆火柴有大于1根火柴
T态:异或和为0
S态:异或和不为0
T2态:T态当中充裕堆数>=2
T0态:T态当中充裕堆数=0
S0态:S态当中充裕堆数=0
S1态:S态当中充裕堆数=1
S2态:S态当中充裕堆数>=2
注意 不存在T1态
因为只有一个充裕堆时 其最高位对应>1 不会被异或消掉
也就是充裕堆会影响高位
Nim相关定理
定理1 对于任意一个S态 总能合理合法地使其转化为T态
定理2 对于任意一个T态 无论怎么取 都是转化为S态
Anti-Nim相关定理
S0态必败 T0态必胜
这个就比较好想了。。。。。。
S1态 只要方法正确 必胜
两个操作
1.孤单堆是奇数时 那么就拿走充裕堆
2.孤单堆是偶数时 那么就把充裕堆拿成孤单堆
S2态不可以一次性变成T0态
两个充裕堆你怎么同时取? ? ?
S2态 只要方法正确 可以一次性变成T2态
由上可得
S2态不可以一次性变成T0态并且不存在T1态
那么S2态只能一次性变成T2态
T2态只可以只变为S2态或者S1态
还是 两个充裕堆你怎么同时取? ? ?
S2态 只要方法正确 必胜
1)S2态 先手就把TA变为T2态
由于T2态只可以只变为S2态或者S1态
如果后手将T2态变为S2态 重复1)
如果后手将T2态变为S1态 必胜
T2态必败
此时也就是先手面临楼上 2) 的情况 必败
综上
必胜态:T0,S1,S2
必败态:S0,T2
经过观察得出最终定理
1.每一堆石子只有一个时 且异或和为0
2.存在至少一堆石子多于一个时 且异或和不为0
此时满足上述一个条件 先手必胜
SJ定理
定义Anti-SG游戏
决策集合为空时 当前者胜
其余同SG游戏
先手胜利当且仅当
1.游戏SG函数不为0且某个单一游戏SG值大于1
2.游戏SG函数为0且任意单一游戏SG值=1
得证
例题
【bzoj1022】 (or) 【luogu4279】