博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SJ定理——省选前的学习2
阅读量:6179 次
发布时间:2019-06-21

本文共 1247 字,大约阅读时间需要 4 分钟。

——博弈论?上SG定理!什么?不行?那就SJ定理吧。

原来还有这么个玩意。。。

bzoj1022.

大意是Nim取石子游戏中取到最后一个石子就算输,即无法取了就获胜(原版是无法取了就输)。

我们试图套SG定理。。。$SG_0$=??

比如我令SG[0]=1,那么问题来了:两堆石子,个数均为0,应该是先手必胜,但$SG_0 \oplus SG_0 = 0$,所以不合法。

SJ定理:

若把SG游戏中的空状态定义为必胜状态,那么状态是先手必胜当且仅当下述条件同时成立或同时不成立:

1: $SG_S = 0$

2: $\forall x \in S  \; SG_x \leq 1$

其中,$SG_S$是状态的SG值,$SG_x$是各子问题的SG值。

 

证明(不想看请跳过):

首先,终止状态由于满足两个条件,所以必胜。

 

其次,证明必败态的后继全是必胜态:

1:若满足条件1而不满足2,那么$SG$值大于$1$的一定不止一个(因为异或中小于等于$1$的之会影响最后一位,所以前面所有位必须有至少两个数,即至少有两个数大于$1$),那么,进行一步后$SG$值一定非零,且还是有大于$1$的,即两条件都不满足。

2:若满足条件2而不满足条件1,可以发现现在一定只有奇数个$1$和若干$0$。那么现在有两种可能:

  (1)将一个$1$变成$0$,或将一个$0$变成$1$(注意,$SG$值可以变大,但不会不变),那么条件1得到满足,且条件2仍满足,即为必胜态;

  (2)将一个数变得大于$1$。此时可发现$SG$值异或和必不为$0$,所以两条件都不满足,为必胜态。

 

最后,证明必胜态至少有一个后继是必败态:

1:若两条件都满足,那么必有偶数个$1$和若干$0$,此时只需要将一个$1$变成$0$,就会使条件1不满足。

2:若两条件都不满足,那么:

  (1)若只有一个数大于$1$,那么将其变为$0$和变为$1$都会满足条件2,且必有一个选择使$SG$值不为$0$,即为必败态;

  (2)否则,后继必不满足条件2,此时类似于SG定理,必定能使$SG$值变为0,即为必败态。

证毕。

 

附AC代码:

 

1 #include 
2 int main() { 3 int T, n, x, y, t; 4 for (scanf("%d", &T); T; --T) { 5 for (scanf("%d", &n), y = t = 0; n; --n) { 6 scanf("%d", &x); 7 y ^= x; 8 t |= x > 1; 9 }10 puts((!!y ^ t) ? "Brother" : "John");11 }12 return 0;13 }
View Code

 

 

 

转载于:https://www.cnblogs.com/y-clever/p/6667592.html

你可能感兴趣的文章
Android Studio导出jar包
查看>>
通过python 爬取网址url 自动提交百度
查看>>
我的友情链接
查看>>
乔布斯走了,苹果会坠落吗?
查看>>
java高级_01
查看>>
win8重装成win8.1后把hyperv的虚拟机导入
查看>>
linux命令汇总(mkdir、rmdir、touch、dirname、basename)
查看>>
mv或者cp带小括号文件名解析问题总结
查看>>
Elasticsearch学习笔记3: bulk批量处理
查看>>
EBS12.2.5 升级到EBS12.2.6的问题及跟踪处理
查看>>
网站访问流程
查看>>
java的日志工具log4j的配置方法
查看>>
jQuery on()方法
查看>>
步调一致才能得胜利
查看>>
mysql 锁机制
查看>>
add_header X-Frame-Options "SAMEORIGIN";NGINX
查看>>
linux中的计划任务
查看>>
Android style报错
查看>>
Lintcode130 Heapify solution 题解
查看>>
【Map】Map、HashMap
查看>>