【USACO Contest 】Holiday 2010 Bonus Competition, Problem 2: Rocks and Trees (rocks)
来源:互联网 发布:java导出图片 编辑:程序博客网 时间:2024/06/10 05:39
好不容易看懂了题。
1 - - -
/ / / / / / / /
2 3 5 3 3 3 3 1
图灵 图一 图二 图三
(图灵都出来了,我汗)
图二中先取者Ted不能获胜,是因为他在两个3里面移动任意一堆的x个石子,对手一定会在另一堆也移x个石子,继而使两堆的数量相同(或同为0,这样Ted就输了)。
然而图三中,Ted可以在左边的那个3个石子中移动2个,使两堆成为1跟1.,这样,对手只能移动其中一个1,Ted移动另一个1,就获胜了。
我是肉眼凡胎,只看出了树上深度相同的节点可以合并,最后合并成一条链,Ted是否能赢与石子深度的奇偶性有关系,但是没有发现这实质上是Nim取子游戏。(啊……这个contest要求数学知识渊博啊T_T,还得记性好,记住公式)(路人:你以为是啥,DP?)
[以下抄袭Analysis中的思路,我在考虑要不要把文章类型改为“翻译”]
树上的每个节点根据离根的距离(也就是深度(根的深度为0))的奇偶性分为奇节点与偶节点。
偶节点上的石子不要主动去移。当对手把偶节点的石子向奇节点移动x个时,Ted就可以把这x个石子再向根移动x个。这样,经过一阵沧桑后,所有偶节点的石子都将归于根节点。(于是凡是一个石子进了偶节点,就相当于进了一个归宿明确的黑洞,再也不能干扰奇节点的移动了。)
而奇节点上的石子,每次移动就是到了偶节点,也就是被偶节点“吃掉”了,我们不用管了。
于是,就成了Nim取子游戏,每个奇节点是一堆,没人每次在任意一堆中取走的石子数不超过L。
根据(没有每次取子上限的)Nim取子游戏公式(参见http://en.wikipedia.org/wiki/Nim),一共有N堆石子,每堆a[i]个,则当每个a[i]进行异或运算后等于0,则先取者有机会获胜。
在每次取子有上限L的情况下,公式类似,只是把每个a[i]换成a[i] mod (L+1),其余不变。
C++代码:
- 【USACO Contest 】Holiday 2010 Bonus Competition, Problem 2: Rocks and Trees (rocks)
- 【USACO Contest】Holiday 2010 Bonus Competition, Problem 1: Cow Politics (cowpol)
- 【USACO Contest】Holiday 2010 Bonus Competition, Problem 3: Driving Out the Piggies (dotp)
- ODBC Rocks!
- VTK rocks
- Google Calendar is live and it rocks
- 幻灯片:Why Java Sucks and C# Rocks
- High Performance Linux Clusters with OSCAR, Rocks, OpenMosix, and MPI
- Microsoft "Live.Com" Rocks :-)
- ActionScript 3.0 rocks!
- OpenGL + CUDA + DevIL rocks!
- www.diigo.com rocks
- Html5 Rocks 镜像
- JavaScript Performance Rocks
- SSH ControlPersist rocks.
- rocks制作lustre-roll
- uva11134 Fabled Rocks 贪心
- rocks快速添加节点
- 基数排序
- 必须知道的10个不常用HTML标签
- F#入门-第二章 F#基础-第九节 while循环
- Linux下使用C做简单的网络编程
- 生成ssh服务器密钥
- 【USACO Contest 】Holiday 2010 Bonus Competition, Problem 2: Rocks and Trees (rocks)
- Linux下mySQL命令大全
- 防止内存泄露 Linux下用Valgrind做检查
- Oracle&SQL,SQL的基础还是太薄弱了点
- FILE结构体(C语言版)
- 经典的LAMP安装
- 拓展动态编程的新领域
- 一个通用WebService功能的实现与反射
- 學習.Net(c#)打印--打印預覽