Nim

POJ.1704.Georgia and Bob(博弈论 Nim)

淺唱寂寞╮ 提交于 2021-02-09 01:45:39
题目链接 $Description$ 一个1~INF的坐标轴上有n个棋子,给定坐标Pi。棋子只能向左走,不能跨越棋子,且不能越界(<1)。两人每次可以将任意一个可移动的棋子向左移动一个单位。问先/后手会赢或是否无解。 $Solution$ 首先考虑相邻两个棋子 无论一个人怎么移动前边的棋子,后手都能移动后面棋子同样的距离使得这两个棋子间间隔不变(后手可以模仿。但是移动后面的棋子时,后手是不能模仿的) 同时两个棋子局面的终止是两个棋子相邻 不难想到以这两个棋子间距离为石子数做一个Nim游戏 那扩展到n个棋子? 两两配对 ,对于每一对看做一个Nim游戏 当棋子数为奇数时需要将第一个棋子和点1看做一对 状态是有限的 不会无解 **Update:**其实就是个阶梯博弈。 //332K 0ms #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar() int A[1005]; inline int read() { int now=0;register char c=gc(); for(;!isdigit(c);c=gc()); for(;isdigit(c);now=now*10+c-'0',c=gc()); return now; } int main() { int t=read()

【博弈论】Nim游戏

人盡茶涼 提交于 2021-02-09 00:56:38
百度百科 Definition 这样的游戏被称为Nim游戏: 1、有两个玩家,轮流进行操作 2、是公平游戏。即面对同一局面两个玩家所能进行的操作是相同的。例如中国象棋 不是 公平游戏。因为面对同一个局面,红方只能移动红色棋子而不能移动黑方棋子,黑房同理。 3、一个玩家是输掉当且仅当他无法进行操作。例如如果是两个人轮流取石子的游戏,那么一个玩家输掉当且仅当他面前没有石子了。因为他下面无法进行取石子的操作。 一般的,Nim游戏指两个玩家轮流在好几堆东西中取物品,不能夸堆取,无法操作判负。 ##Solution 对于Nim游戏的解法,因为状态显然是不可逆的,所以可以对状态的转移图进行拓扑排序然后DP求解。但是对于大部分博弈题目,状态多的难以计算,所以需要考虑更简单的方法。 结论:一个Nim游戏中的状态是必败状态当且仅当每个子游戏的异或和为0. 这里子游戏代表构成Nim游戏中最基础的游戏。例如两个人轮流取三堆石子的游戏是三个取一堆石子的游戏组合而成的。对于每个子游戏显然可以用一个正整数代表当前的状态,即还剩多少石子。Nim游戏的子游戏状态异或和为$0$,则必败。 证明:我有一个绝妙的想法,可惜这里写不开 对于一个异或和不为$0$的状态,那么他是必胜态。 考虑在一个必胜态下如何进行下一步。 设异或和是$X$。设$X$二进制的最高为1位是第$k$位。 那么显然存在至少一个状态使得他们二进制第

简单博弈论总结

本秂侑毒 提交于 2021-02-01 03:01:32
简单博弈论 本次简单博弈论讲解五个知识点: 1:bash博弈;2:nim博弈;3:威佐夫博弈;4:Fibonacci博弈;5:sg函数; 首先介绍博弈论问题有如下几个特点 1:博弈模型为两人轮流决策的博弈。并且两人都使用最优策略来取得胜利。 两个玩家,都会采取最优的决策,那么如果存在一个局面为必胜局面,某玩家位于此局面。只要自己无失误,则必胜。那么同样又一个局面为必败局面,某玩家位于此局面。只要对手无失误,则必败。 那也就是说,针对这样的游戏,我们关注点应该在局面上。 2:博弈是有限的。即无论两人如何决策,都会在有限步决出胜负。 3:博弈是公平的。即两人进行决策的规则相同。 相关概念: 先手必胜状态:先手可以从这个状态走到某一个必败状态。 先手必败状态:先手走不到任何一个必败状态。 也就是说先手必胜状态,那么先手一定能采取某些操作,让后手面对必败态。如果是先手必败态,无论先手怎么操作,都无法让后手面对必败态。 bash博弈 假设一堆石子有n个,每次最多取m个,甲乙两个玩家轮流取石子,最后把石子取完的人获胜,保证甲乙每一步的决策都是最优的,请问给定n和m,问甲胜还是乙胜。 不妨假设刚刚开始 n = m + 1 ,那么后手必胜,有如下结论: 令 n = ( m + 1 ) * r + s 其中 (r > 1,0 <= s < m + 1) 。如果s=0的话,先手每次取k个,后手只要取

2019杭师大程序设计竞赛 赛后感悟

我是研究僧i 提交于 2021-01-04 07:34:16
杭师大 进入杭师大给我的第一感受就是美!学校的环境很好,也许是三月的气候宜人,让我有那么一瞬爱上杭师大的感觉,不过的确就是这样,一所110年校史的师范学校有着足够的历史沉淀,不像我金科——它给我的感觉是浮躁且不经修饰,没有经过沉淀缺少某些东西的感觉。 第二感受,人文。刚进门就有亲切的志愿者小姐姐给我们一行人指路哈哈哈哈,也许是因为在理工科院校呆久了吧,也是深深受到金科木讷气息的感染,人也开始变得有些木讷。而杭师大给我一种愉悦亲切的氛围,环境确实是好啊,建筑物也很好看,小姐姐很多也都很有气质。有一件趣事我倒是想说一下——比赛当天有很多发气球的小姐姐,给我的感觉就是他们真的很温柔啊,后来写到后半段我们队都在对I题冥思苦想,这时急需一本词典,于是我向左边的小姐姐提出请求让她帮助我们借一本词典,她很欣然的接受并帮我们借到了,郭哥在一旁打趣——“你真是我们的再生父母啊”,当场笑喷。从那个时刻起原本觉得很优秀的前任与杭师大的小姐姐们一比也显得相形见绌了,不禁感叹,人真的是要多走出去看看啊,不能总蜗居在一个地方,时间久了人也变得木讷无趣,空泛乏味。现在网络上到处横行着扭曲的价值观和诡异的没有任何营养的语句,举个例子——“每天多洗洗脸,多整理整理衣物,泡点牛奶喝点枸杞茶,对自己好一点...”诸如此类的矫情做作的文章,侵蚀着还未成熟的当代大学生们。。。(扯远了 本次比赛,我们队总共就拿了三个气球

历届试题 高僧斗法

落爺英雄遲暮 提交于 2020-12-18 05:52:00
题目 高僧斗法 古时丧葬活动中经常请高僧做法事。仪式结束后,有时会有“高僧斗法”的趣味节目,以舒缓压抑的气氛。 节目大略步骤为:先用粮食(一般是稻米)在地上“画”出若干级台阶(表示N级浮屠)。又有若干小和尚随机地“站”在某个台阶上。最高一级台阶必须站人,其它任意。(如图1所示) 两位参加游戏的法师分别指挥某个小和尚向上走任意多级的台阶,但会被站在高级台阶上的小和尚阻挡,不能越过。两个小和尚也不能站在同一台阶,也不能向低级台阶移动。 两法师轮流发出指令,最后所有小和尚必然会都挤在高段台阶,再也不能向上移动。轮到哪个法师指挥时无法继续移动,则游戏结束,该法师认输。 对于已知的台阶数和小和尚的分布位置,请你计算先发指令的法师该如何决策才能保证胜出。 输入数据为一行用空格分开的N个整数,表示小和尚的位置。台阶序号从1算起,所以最后一个小和尚的位置即是台阶的总数。(N<100, 台阶总数<1000) 输出为一行用空格分开的两个整数: A B, 表示把A位置的小和尚移动到B位置。若有多个解,输出A值较小的解,若无解则输出-1。 例如: 用户输入: 1 5 9 则程序输出: 1 4 再如: 用户输入: 1 5 8 10 则程序输出: 1 3 资源约定: 峰值内存消耗 < 64M CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

刷题

拥有回忆 提交于 2020-11-19 03:51:56
<h2>6月15日</h2> <p class="title">Codeforces Round #158 (Div. 2)</p> <p>A.模拟</p> <p>B.map</p> <p>C.map</p> <p>D.构造</p> <p>E.线段树</p> <p class="title">Croc Champ 2013 – Round 2</p> <p>A.模拟</p> <p>B.状压+dfs</p> <p>C.数学</p> <p>D.概率与期望</p> <p>E.点分治</p> <p class="title">Codeforces Round #146 (Div. 1)</p> <p>A.暴力</p> <p>B.dp</p> <p>C.后缀自动机</p> <p>D.概率与期望</p> <p>E.莫比乌斯反演</p> <h2>6月8日 PKUSC</h2> <p>Codeforces Round #290 (Div. 1)</p> <p>拓扑排序:A.Fox And Names</p> <p>记忆化搜索+map:B. Fox And Jumping</p> <p>dancing link:3074.Sudoku</p> <p>数位dp:3252.Round Numbers</p> <p>模拟:1665.Biker’s Trip Odometer</p> <p>数学:1930

博弈论

可紊 提交于 2020-11-14 01:43:35
https://blog.csdn.net/lgdblue/article/details/15809893 (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走 k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的 取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。 这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十 个,谁能报到100者胜。 (二)威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同 时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。 这道题是威佐夫博弈的一道入门题,问的十分简单,就是套威佐夫博弈的两个公式即可,因此顺带说说威佐夫博弈,威佐夫博弈和巴什博奕的场景很类似,所以索性就套用我在巴什博奕那篇文章中所描述的的那个场景。有两个二货,比赛拿XX(XX可以是任何东西,只要能定量拿走就好)

【算法】简单博弈论

北城以北 提交于 2020-10-29 16:25:26
巴什博弈 (bash game) 题型 仅有一堆n个物品,两个人轮流取1~m个,最后取的人胜(不能取的人输) 分析 总体可分几种情况 $n=0$,先手输 $0<n<=m$,先手胜 $n=m+1$,先手输 $n=k*(m+1)+r$,先手胜(先手取走r个,给后手留下k*(m+1)的局面) $n=k*(m+1)$,先手输 代码 int Bash_Game( int n, int m) //是否先手有必赢策略 { if (n== 0 ) return 0 ; if (n%(m+ 1 )!= 0 ) return 1 ; return 0 ; } 尼姆博弈(Nim Game) 题型 将一堆变为多堆; 即: 有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜。 分析 本部分含其他博客内容 地址:https://www.cnblogs.com/jiangjun/archive/2012/11/01/2749937.html 首先自己想一下,就会发现只要最后剩两堆物品一样多(不为零),第三堆为零,那面对这种局势的一方就必败 那我们用(a,b,c)表示某种局势,首先(0,0,0)显然是必败态,无论谁面对(0,0,0) ,都必然失败;第二种必败态是(0,n,n),自己在某一堆拿走k(k ≤ n)个物品,不论k为多少,对方只要在另一堆拿走k个物品

kotlin 1千万回文

我是研究僧i 提交于 2020-10-16 12:41:48
C,D,Go,Rust,Nim,Zig,V,Julia,Py,C#,Kotlin 11语回文数大战!仅供娱乐参考! https://my.oschina.net/raddleoj/blog/510932 Kotlin 20202820 // huiwen.kt import kotlin.system.* fun main(args: Array<String>) { run() println("Hello, World!") } fun ishuiwen(n: Int) : Boolean{ var sn: Int = n; var tn: Int = 0; while (sn != 0) { tn = tn * 10 + sn % 10; sn /= 10; } if (tn == n) { return true; } return false; } fun huiwen(max: Int = 10000000) : Int{ var tx: Int = 0; for (x: Int in 0..max) { if (ishuiwen(x)) tx ++; } return tx; } fun run(){ var total: Int = 0 val t1 = getTimeMillis() val total: Int = huiwen(10000000); val

Ethereum 2.0 Meeting #43 | 以太坊 2.0 会议第43期

假装没事ソ 提交于 2020-10-02 05:15:21
会议: 以太坊2.0会议#43 会议日期: 2020 年7月9日 会议时长: 1 小时 会议视频链接: https://youtu.be/4IooxDX_GfU 会议日程: 1. 测试和版本更新 2. 测试网更新 3. 客户端更新 4. 应急响应 5. 关系到用户安全和用户体验的弱主观性 6. 研究更新 7. 网络侧更新 8. 规范讨论 9. 开放讨论/总结 会议主要内容: 1. 会议开始,主持人Danny先开始第一个议题,即 测试和版本更新 。Danny介绍说v12.2版本马上就要发布,并能完全向后兼容。现在主要做的就是在发布前再调试一下gossipsub的参数。 Proto 对团队的进展进行了介绍。其中,最重大的进展是上周发布了Rumor v2,里面包含了许多新的命令,并对脚本进行了优化。现在仍然在做一些类似同步命令的优化工作。Proto说针对Phase1的测试才刚开始,同时Python Eth2的规范同步在升级。他认为现阶段测试分叉选择实施方法的最佳方案是在Rumor上面测试,而不是之前大家认为的在每个不同的客户端上面开放接口来测试,所以他会准备一个Rumor教程给大家。Danny强烈推荐各个客户端团队都仔细地阅读这个教程。 Mehdi 介绍说上周更新了信标模糊测试,文字帖在同步准备。Docker化和信标模糊测试都完成了,这样用户就可以轻松地在家使用