这篇文章,我们开始对奥数中有关操作和游戏的问题进行分析和讨论,其实在信息学竞赛中涉及到的一些博弈问题(分析必胜策略)的问题(例如巴什博弈、尼姆博弈),本质上来讲,就是组合数学当中的组合游戏,并不是真正意义上的博弈论。

下面就让我们来看看,这蕴藏着“必胜策略”的组合游戏到底有着怎样的玄机。

问题一:两个人交替地在黑板上写从1~1000的自然数,第一个人在黑板上写的数是1,然后,在黑板上写的数要么是2a,要么是a+1,其中,a是已经写在黑板上的数,且在黑板已经写过的数不允许再写,首先在黑板上写下1000的人获胜,问:谁有获胜策略?

分析:首先我们应该考虑到,两个聪明的游戏者都不会去写500和999,而更重要的是,也不会去写501.为什么呢?500和999就不用说了,对于501,由于它是奇数,只能通过a+1来写出,也就是说,当且仅当黑板上有500这个数字,某个玩家才能写出501,但这显然是不合理的决策,通过500明明可以直接赢嘛,因此,我们考虑除1000、999、500、501四个数字以外的996个数字的构造情况。

我们可以看到,将996分为498组:(1,2)、(3、4)……,每当先手写下一个数字a,那么后手就写一个数字a+1,这样一来,两个聪明的决策者会依次写完这996个数字,而后手写完第996个数字,先手就必须在500、999当中选择其一(写不出501),必败。

问题二:一次宴会有n位客人被邀请,他们围着圆桌作成一圈,且座位已经被主人用卡片分别表上1,2,3...,n共n个号,一维服务员根据一种奇特的规则为客人服务:他挑选一位客人为其服务,然后,根据这位客人座位的数目逆时针移动相同数目个座位后,为这个座位上刚到的客人服务,类似地,他用同样的方式逆时针移动座位,数目等于他刚服务的客人座位上的数目。

求所有的正整数n,使得主人可以放置这n张卡片,且服务员能恰当地选择一位客人开始,依据如上的规则,为每位客人服务。

分析:我们考虑从奇偶性的角度为n分类,看是否能得出通用的策略。

当n = 2k + 1,我们用a[i]记录某个位置的卡片数,我们将某个点记为第一个点,我们假设存在这样一种可以服务n个客人的方案,得到这样表示服务顺序的数列:a[1]、a[2]...、a[2k+1],我们能够看到,a[2k+1] = 2k + 1,否则的话,服务完卡片数是2k + 1的客人以后,服务员会陷入死循环。那么这里就有∑a[i] = 1 + 2...+2k (i∈2k) = k(k+1),这表明在给这2k个客人服务的时候,服务员也会陷入死循环,因此n是奇数的时候,无论如何是没有可行的方案的。

当n = 2k,我们用对称性的思维来寻求一种可行的方案,我们假象出圆上的一个对称轴,希望服务员服务完对称轴一侧的客人,就去服务另一边对称的部分,即是这样一种方案,a[1] = 1,a[2] = 2k - 2,a[3] = 3,a[4] = 2k-4……,即按照卡片数是1、3、5、……、2k-1、2k、2、4、……2k-2的顺序,形成一个圆,然后服务员从1号开始服务,便得到一种可行策略。

综合起来,当且仅当n是偶数的时候,服务员存在给每个客人服务的策略。

问题三:

十个盒子排成一圈,从某个盒子开始,顺时针一次放入1,2...10粒弹珠,按照以下规则操作:要么在相邻的两个盒子里分别加一粒弹珠,要么从相邻的两个盒子里分别拿走一粒弹珠,问:是否有可能通过有限次操作,使每个盒子里均有2011粒弹珠?

分析:若记a[i]表示第i个盒子里存有的弹珠数量,则整个问题的起始状态是这样的——∑a[i] = 55.我们假设经过有限步骤,∑a[i] = 10x2011,在考虑到每次操作的自身性质,即,使∑a[i]加2或者减2,这都不会改变∑a[i]自身的奇偶性,由此我们很容易看到已知和假设之间存在的矛盾。由此得出结论,是不存在可行的方案的。

问题四:

已知六个互不相同的正整数a、b、c、d、e、f,杰克与杰瑞分别计算这些数中任意两数之和。杰克说数之和中含有10个素数,而杰瑞说素数只有9个。问:谁说得对?

分析:

我们注意到这样一个细节,既然是六个互不相同的正整数,则我们可以知道六个数中任意两个数之和必然大于2,我们记集合A中的C(6,2)个元素记录了任意两个数的和,记m是奇数的个数,而n是素数的个数,则有m ≥ n成立。设k是六个数中偶数的个数,则m = k(6-k)。对于k,依次带入1、2、3、4、5、6,m分别等于5、8、9、8、6、0,即有n≤9,因此杰瑞的话是正确的。

问题五:

考虑2 x 2010的矩阵,甲将恰覆盖两个单位方格的水平多米诺放入矩阵,然后,乙将恰覆盖两个单位方格的竖直多米诺放入矩阵,接着再由甲方水平多米诺,乙放竖置多米诺,……不能放入多米诺的选手就输掉了比赛。问:尽可能多的填充大矩形的条件下,谁有取胜策略?

分析:

首先我们来看所谓“尽可能多的填充”的条件,即告诉我们1x2的多米诺不要交错填充。

我们来从一个更加一般的情况来入手,对于一个2xn的大矩阵,我们如何来分析必胜策略的呢?

关键在于,我们要利用甲乙双方充分聪明的假设,来模拟出甲乙两人的决策。我们先假设甲随机填充了1x2的多米诺,则乙的最优策略是在该1x2的多米诺的某一侧,隔一列,填充一个2x1的多米诺,这样我们能够看到,2x4的小矩形分别被甲乙填充两次。那么我们换一个角度,如果乙随机填充了2x1的多米诺,则甲的最优策略是什么的?显然,隔一列填充1x2是不明智的举动,因为这给乙预留了一个填充的位置。那么隔两列呢?在以后的步骤中,甲可能会两次填充这空出的2x2方格,但是相应的乙也会相应的做出填充,所以我们可以看到,隔偶数列的所有情况本质上是等效的,基于此能够看到隔奇数行都是不合理的,因此这里我们不妨让甲的1x2多米诺紧贴这乙的2x1.

那么按照这种模式,n%4 = 0的时候,后手必胜。

而如果n%4 = 1,最终将会剩下2x1的小矩阵,考虑到先手填充的是1x2多米诺,依然是后手必胜。
  而对于n%4 = 3,如果剩余的三列任意两列相邻,那么先手必胜。我们现在需要讨论的则是是否会出现三列都不相邻的情况。它无非由如下两种情况。
  1.两个2x1的多米诺夹着一个1x2的小矩形,通过上面的分析可知甲不可能让这种情况出现。
  2.两个1x2的多米诺夹着1x2的小矩形,这会使得2x1的多米诺相隔为奇数,通过上面的分析,也是不应该存在的。
  因此三列不相邻的情况是不会出现的。

基于n%4 = 3的情况,我们来看n%4=2,即这里剩余的两列必然相邻,则先手必胜。

对于这个题目,有2010%4 = 2,即甲存在必胜策略。

问题六:

将2009个砝码排成一行,每个砝码的重量均为整数克,且均不超过1000克。每两个相邻砝码重量均恰差1克,所有砝码的总重量为偶数克,证明:可将所有砝码分为两堆,是的两堆砝码的总重量彼此相等。

分析:我们尝试从“每两个相邻砝码重量均恰差1克”这个条件建立起某种平衡。我们跳出题设给出的限制,从更加一般的情况来考虑,如果这里有2n个砝码,满足题设的排列,那么我们将第1个和第2个配对,第3个和第4个配对......那么我们可将2n个砝码等价看成n个1g砝码,那么如果n再是偶数的话,平衡的方案就显而易见了。

通过上面一个简单的例子的分析,我们进行启发性的思考,对于砝码数是2n+1时候,拿出第一个或者最后一个砝码,假设其质量是a,那么剩余2n个砝码进行配对,等价转化成n对1g砝码,我们只要设法用这n个1g砝码组合成a质量即可得到一个平衡方案。
  那么接下来我们需要解决的问题就是n个1g砝码组成a质量的必然性的证明了。我们开始结合具体的数字,2009 = 1 + 2x1004,即n = 1004,我们设左右盘各放p、q个1g砝码,那么有如下的等式。
  p + q = 1004
  p -  q = a
  容易看到,当且仅当a是偶数的时候p、q有整数解。那么a是否是偶数呢?我们再次回到题设条件,考察“所有砝码的总质量为偶数克”,结合“相邻两个砝码重量差1”,将这些砝码排列标上[1,2009]序号,我们推知奇数位的砝码重量的奇偶性一致,偶数位的砝码重量的奇偶性一致。考虑[1,2009]区间上有奇数个奇数,那么奇数位的砝码必然是偶数。所以上述方案中,无论选取拿走第1个还是第2009个砝码,p、q都必然存在整数解。
  证毕。

问题七:

两名海盗分一堆总质量为S克拉的钻石,其中,最重的一颗为m克拉,他们将这堆钻石分成两小堆,每人得到其中的一小堆,若小堆钻石的重量分别为S1、S2,且S1≤S2,证明:

(1)S1≤S-m;

(2)海盗能够分成满足S1≥(S-m)/2.

分析:其实这道题目本身并没有呈现出太过明显的组合模型,它只是基于组合数学基本的最现实意义的关注,和对一个问题中不同选项条理化的分析,利用一定的不等式的技巧便可证明。

对于(1),即证S2≥m,无妨出现如下两种情况。

如果m克拉的钻石在S2中,那么显然成立。

如果m克拉的钻石在S1中,那么有S2≥S1≥m。得证。

对于(2),我们考虑利用反证法,即需要将(2)中的存在性命题经过逆否等价转换成全程命题,设S1max是所有方案中最小堆的最大值(其实就是(int)S/2,引入新字母是为了表述方便),假设S1max<(S-m)/2,S = S1max + S2min,我们基于这种临界情况,来得到其他情况。

现在将S2min堆中的某质量为a钻石拿到S1max中,则钻石现在被分成S1' = S1max + a,S2' = S2min - a。

则能够容易看到的不等关系是S1max ≥   S2'。

则S = S1'+S2'

=S1max + a + S2'

≤2S1max + a

<S-m+a

≤S,显然与事实不符。

因此假设的逆否的全称命题不成立,原命题的存在性命题是正确的。

问题八:

桌子上有10堆核桃,每堆中分别有1、2...10只核桃。两人轮流做取走核桃的游戏。规定每人每次只能取走一只核桃,一直进行到剩下三只核桃为止。若剩下的三只核桃属于不同的三堆,则先开始的人输;否则就是他赢。试问:谁有取胜策略?

分析:为了方便论证,记先手是甲,后手是乙,并记录剩余一只核桃的核桃堆是“单堆”,剩余两只核桃的核桃堆时“双堆”。我们先单单从甲的角度出发,只要最终三个核桃不全属于“单堆”,那么甲获胜,那么在决策的过程中,甲就倾向于消除“单堆”。

共有55个核桃,乙将取完倒数第4个核桃,这是最终状态。对于先手的甲,只要他本着如下的拿核桃原则:

(1)出现单堆就取走其中的核桃。(消除单堆)

(2)不取双堆中的核桃。(不制造单堆)

那么我们便可以看到,初始状态下甲面临只有一个单堆的10个核桃堆,在甲取完核桃之后单堆数变成了0个。乙取玩核桃之后至多出现1个单堆,随后甲取完后又变成了0个。反复起来,乙取完倒数第4个核桃,仍然至多有1个单堆,即引导出了甲(即先手)胜利的结果。

问题九:

黑板上写有一些整数,这些数均在1~7之间,且1~7中每个数可能不出现,也可能出现多次。

现随意选择一些不同的数擦掉,再写上另外的数,使得两者的并集为{1,2,...,7},并把这种替换视为一次操作。证明:若对于一组数进行一系列操作后,黑板上只剩下一个数,此数与操作无关。

分析:我们从黑板上某数字i出现的次数a[i]的奇偶性来分析这个问题,因为从题中我们能够看到,在每一次操作中,对于整数i∈[1,7]一起其在黑板上出现的次数a[i],要么+1,要么减1,这表明一次操作后,a[i]原来是偶数的,会变成奇数,原来是奇数的,会变成偶数,即七个数字在黑板上出现次数的相对奇偶性是不受操作数的影响的.因此对于最终状态,对于某个整数x在黑板上出现1次(奇数),而其余数字出现0次(偶数),它是取决于黑板上一开始各数字出现的情况,即有1个整数出现的次数的奇偶性与其余6个数字出现次数的奇偶性均不相同,这样便会出现题目所描述的最终情况。证毕。

问题十:

在黑板上写下一些整数,一次操作为:选择两个数a、b,用3a-b、13a-3b替换它们,若初始状态下写在黑板上的数是1,2,3,... ,2012,问:是否可能经过有限次的操作使黑板上的数变为2,4,...,4024?

分析:我们对于每一次操作,来做进一步的分析。每经过一次操作,所有数字之和会增加,这是因为(3a-b+13a-3b)-(a+b)=5(3a-b)>0,我们能够看到,无论经过多少次操作,这2012个数的和都是关于5同余的。那么对于其实状态,1+2+...+2012=2013 * 1006 = 3 (mod 5),而2+4...+4024=2013 * 2012 = 1(mod 5),这显然与我们已经推出来的结论不服,因此不存在有限此操作是序列变为2,4,...,4024.

问题十一:

某工厂对优秀员工奖励红、蓝、绿三色标志。一直三枚红标可换一枚蓝标,三枚蓝标可换一枚绿标,三枚绿标可换一枚红标。年终时,鲍勃得到红、绿、蓝三色标志各2011枚,并将其兑换至每色标志至多剩下两枚。求兑换结束后所有可能的结果。

分析:通过观察题目我们能够看到,鲍勃经过一定的操作使得他手里的标志减少了,那么为了更好的了解这个题目我们需要搞清楚他是怎样让多余的标志消失的。

其实很显然,交换机制是一个单向循环,举个例子,我们27个红标换9个蓝标,然后再用9个蓝标换3个绿标,然后用3个绿标换1个红标,相对于起始状态,我们少了26个红标。即,我们需要完成一次循环交换,才能够减少红标的数量,对于蓝标、绿标也需要进行相同的操作才能够降低他们的数量。

为了分析的方便,我们利用交换机制将三种颜色的标建立等价关系,即如果红标示1块钱的话,那么蓝标就是3块钱,绿标就是9块钱,这样我们做的好处是我们缩减了变量或者说是统一了变量。设a、b、c是红、蓝、绿三种标的个数,则f=a+3b+c就完成了这种统一变量的过程。

则我们能够看到,每进行一次循环交换,f将减少26,则对于起始状态,我们将f = 2011*(1+3+9)对26取模,就会得到数据规模大大减小的一种状态。

设x、y、z是最终剩余的红、蓝、绿色标,则x+3y+9z ≡ 13(mod 26)中(x,y,z)便是最终解,其中x、y、z∈{0、1、2}。

而x+3y+9z ≤2(1+3+9) = 26,因此同余方程的解可以转换成x+3y+9z=13。那么我们一次简单的枚举z、y、x的值,不难得到解(x,y,z)。

总结起来,这道题目处理方法的精髓便在于利用循环交换机制而建立一个统一的变量f,它其实是一种从红(蓝/绿)的角度从“本质”上来表征当前手头有多少标的思维,这将为我们先前分析出“循环交换一次某一种颜色的数量将减少26个”的结论的利用制造除了用武之地。

问题十二:

现有11张卡片分别写有数字1,2,3,…11.将这些卡片发给等距圆桌排列的11个人,起初,将卡片1~11沿逆时针方向发给这11个人,每人恰有一张。现规定每一次的操作规则如下:每一次操作中一个人把他的一张卡片给与他相邻的一个人,若这张卡片上的数字i满足:这一次操作前,写有i-1、i、i+1的三张卡片的位置不是一个锐角三角形的顶点。证明:无论进行多少次操作,这些卡片不会全传到一个人手上。

分析:这道题目非常考察我们对本质的洞察,这其实是学习数学的一个重要的能力。首先我们基于一个被11等分的圆弧,顺时针标号1~11,在这里,我们定义一个变量f, f表示卡片i到卡片i+1的距离之和,注意这里有向的。

即f = ∑(dis(i to i+1)),i∈[1,11],dis(i to i+1)表示卡片i按照顺时针方向到达卡片i+1的距离,这里对于距离的定义很简单,对于初始状态,卡片dis(i to i+1) = 1。

那么有了这些变量的定义,我们便可以更好的对整个过程和其中的操作进行分析。

对于起始状态,我们能够看到,f = 11,而对于最终状态,f = 0.

那么我们现在开始分析每一步操作,对于卡片i-1、i、i+1三张卡片的相对位置,我们有下面两种等价形式。

(1)i-1、i、i+1:

①移动i:f不变。

②不移动i:f不变。

(2)i-1、i+1、i:

①移动i:f不变。

②不移动i:f不变。

由此我们推出了矛盾,证毕。

问题十三:三元实数组(a,b,c)可变换成数组(a+b,c-a,2a)或(4a+2b+c,2b+c,4a+2b+3c).能否利用上述变换将数组(1,-2,1)变成(47,1549,2011)?

分析:定义操作A:(a,b,c) -> (a+b,c-a,2a)。

定义操作B:(a,b,c) -> (4a+2b+c,2b+c,4a+2b+3c)。三元组记为(x,y,z)。

对于问题的问法,我们已经能够将数据的范围缩小到整数了。

能够看到经过A操作,实数组的z位置是偶数,因此可推知得到(47,1549,2011)之前的最后一步操作是B。而观察操作B会带来怎样的性质,有x - y = 0(mod 4),而显然47-1549的结果并不是4的倍数,由此推出了矛盾。

得出结论,不能。

《Mathematical Olympiad——组合数学》——操作和游戏的更多相关文章

  1. 《Mathematical Olympiad——组合数学》——染色问题

    恢复  继续关于<Mathematical Olympiad——组合数学>中问题的分析,这一篇文章将介绍有关染色的问题. 问题一: 将一些石头放入10行14列的矩形方格表内,允许在每个单元 ...

  2. 《Mathematical Olympiad——组合数学》——抽屉原理

    抽屉原理可以说是组合数学中最简单易懂的一个原理了,其最简单最原始的一个表达形式:对于n本书放到n-1个抽屉中,保证每个抽屉都要有书,则必存在一个抽屉中有2本书.但是这个简单的原理在很多问题中都能够巧妙 ...

  3. 《Mathematical Olympiad——数论》——整除

    数论这个东西吧,虽说也是高中IMOer玩的数学游戏,颇具美学性的证明比较多.就目前所知,它在算法里是一些加密技术的基础,不多言,开始具体题目的分析. 问题一:已知数列{an},且a0 = 2 , a1 ...

  4. 防止UI穿透操作到游戏场景

    #if UNITY_EDITOR || UNITY_STANDALONE_WIN if (EventSystem.current.IsPointerOverGameObject()) { return ...

  5. 【读书笔记《Android游戏编程之从零开始》】14.游戏开发基础(Bitmap 位图的渲染与操作)

    Bitmap 是图形类,Android 系统支持的图片格式有 png.jpg.bmp 等. 对位图操作在游戏中是很重要的知识点,比如游戏中需要两张除了大小之外其他完全相同的图,那么如果会对位图进行缩放 ...

  6. Vijos P1196吃糖果游戏[组合游戏]

    描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...

  7. Content Factory:辅助 MonoGame 游戏开发

    Content Factory 是一款辅助 MonoGame 游戏开发的工具.它提供素材管理的多项功能,包括编译素材.编辑自定义数据等,并能同时应用多个游戏平台. 项目设置 选择要创建游戏项目的平台, ...

  8. 分享:在微信公众平台做HTML5游戏经验谈(转载与http://software.intel.com/zh-cn/blogs/2013/04/03/html5)

    分享:在微信公众平台做HTML5游戏经验谈 Dawei Cheng 程大伟... 于 星期三, 03/04/2013 - 03:19 提交 最近微信公众游戏平台讨论得如火如荼,大有HTML5游戏即将引 ...

  9. 用MFC完成一个简单的猜数字游戏: 输入的四位数中,位置和数字都正确为A,数字相同而位置不同的为B。

    最近学习了MFC一些比较基础的知识,所以打算通过做一个简单的数字游戏来理解MFC的流程并进一步熟悉其操作. 在这里,我做了一个猜数字的小游戏.第一步当然是设计主界面,先给大家展示一下游戏界面: 主界面 ...

随机推荐

  1. (转)基于PHP的cURL快速入门

    1. 原文:基于PHP的cURL快速入门 英文原文:http://net.tutsplus.com/tutorial ... for-mastering-curl/ 原文作者:Burak Guzel ...

  2. Android清单文件AndroidMenifest.xml

    1.AndroidMenifes.xml清单文主要结构件结构 所谓主要结构就是每一个清单文件中都必不可少的结构主要是下面三层 第一层.menifest 第二层.application,use-sdk ...

  3. 修改docker默认172.17网段

    docker启动时默认使用172.17.x.x作为容器的ip地址,可以通过以下方法自定义该网段: sudo service docker stop通过命令route -n查看docker0是否存在,若 ...

  4. RAC配置、安装

    RAC  配置及安装 2012年12月30日 星期日 21:49 ******************************************************************* ...

  5. 一个初学者对CLSA.NET框架的使用心得

    什么是CSLA.NET框架? 今天在一个群里,有人问我什么是CSLA.NET,CSLA是Component-based, Scalable, Logical Architecture的简写,CSLA ...

  6. Tensor神经网络进行知识库推理

    本文是我关于论文<Reasoning With Neural Tensor Networks for Knowledge Base Completion>的学习笔记. 一.算法简介 网络的 ...

  7. iOS 使用 FFmpeg

    iOS 使用 FFmpeg 字数486 阅读288 评论7 喜欢5 集成 下载FFmpeg For iOS编译脚本: 打开 terminal 执行sh build-ffmpeg.sh: 步骤2执行完成 ...

  8. Relative与Absolute组合使用

    小伙伴们学习了绝对定位的方法:使用position:absolute可以实现被设置元素相对于浏览器(body)设置定位以后, 大家有没有想过可不可以相对于其它元素进行定位呢?答案是肯定的,当然可以.使 ...

  9. 十一、C# 泛型

    为了促进代码重用,尤其是算法的重用,C#支持一个名为泛型的特性. 泛型与模块类相似. 泛型使算法和模式只需要实现一交.而不必为每个类型都实现一次.在实例化的时候,传入相应的数据类型便可. 注:可空值类 ...

  10. Vijos1834 NOI2005 瑰丽华尔兹 动态规划 单调双端队列优化

    设dp[t][x][y]表示处理完前t个时间段,钢琴停留在(x,y)处,最多可以走多少个格子 转移时只需逆着当前倾斜的方向统计len个格子(len为时间区间的长度,len=t-s+1),如果遇到障碍就 ...