
游戏
文章平均质量分 82
ACM算法日常
这个作者很懒,什么都没留下…
展开
-
Knuth高效洗牌算法
今天在做一个游戏需求的时候碰到一个问题,问题很简单,给定75个球,编号1-75,需要保证初始化的时候位置是随机的。显然,我们可以初始化一个数组A,把75个数放进去,然后做一个shuffle函数随机交换其中的元素,这样就是随机的。我准备这样做一个shuffle,但同时也想看看golang里面是否有这样的接口直接得到结果,看了下还真有,这个函数是rand.Perm(n),这个函数会返回一个数组,比如我传入75,会返回一个0-74的随机数组。arr := rand.Perm(75)好奇心驱使我一探究竟,原创 2021-02-24 08:30:56 · 1486 阅读 · 0 评论 -
流问题Flow Problem(网络最大流)- HDU 3549
网络最大流问题属于算法 里面较难的问题,因为牵涉的概念比较多,这一篇可能需要你花比较多的时间去理解,除了看这个,最好能多参考别的书籍或者文章进行比较学习,不然可能容易产生理解的偏差。 另外本公众号并不打算讲解过于复杂的问题,网络流问题已经严重超过了最初设想的五分钟限制,不过由于是第一篇网络流的题目,可以作为后面相关问题的基础,姑且多写点。如果你觉得一次难以看...原创 2018-12-26 11:48:59 · 5591 阅读 · 0 评论 -
独角兽与数列(置换群循环)- HDU 4985
群论是法国数学家伽罗瓦(Galois)的发明。伽罗瓦是一个极具传奇性的人物,年仅21岁就英年早逝于一场近乎自杀的决斗中。他用该理论,具体来说是伽罗瓦群,解决了五次方程问题。在此之前柯西(Augustin-Louis Cauchy),阿贝尔(Niels Henrik Abel)等人也对群论作出了贡献。 群是 集合G+运算符·,它结合任何两个元素a和b而形成另一个元素,记为a·b。符号"·"是...原创 2018-12-01 18:02:58 · 5515 阅读 · 1 评论 -
算法合集 | 无限的路(递推) - HDU 2073
递推和递归有着很多的相似之处,甚至可以看做是递归的反向。递归的目的性很强,只解需要解的问题,递推有点“步步为营”的味道,不断的利用已有的信息推导出新的东西,而递归是构造出了一个通过简化问题来解决问题的途径。 递推在组合数学中有着典型应用。 本题是递推的示例题,之前算法合集(点击菜单)还有一些部分没有完成,后面还是接着一点点的完善! Problem De...原创 2018-11-16 18:59:31 · 3659 阅读 · 0 评论 -
寻找整数(容斥原理) - HDU 1796
看这题之前先复习一下容斥原理,不然肯定看不懂,呃,如果第一次接触容斥原理的题,可能弄懂了容斥原理你还是看不懂代码,是的,等会你就知道了。 容斥原理简介:在计数时,为了使重叠部分不被重复计算,人们研究出一种新的计数方法:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无...原创 2018-11-20 15:14:54 · 4153 阅读 · 0 评论 -
朋友圈(拉姆齐定理)- HDU 6152
拉姆齐Ramsey定理是一个稍微难于理解的定理,该定理又称拉姆齐二染色定理,是要解决这样的问题: 要找这样一个最小的数 R(k,l)=n,使得 n 个人中必定有 k 个人相识或 l 个人互不相识。 比如本题中的R(3,3) = 6,有3个人认识或者3个人互不认识,最小的数是6个人。6个人中必有3个人相互认识或者相互不认识。 证明并不难,采用二染色方法比较直观的来看看吧...原创 2018-11-13 21:43:49 · 11919 阅读 · 0 评论 -
海战(线段树)- HDU 4027
这一篇是典型的线段树算法,这个算法在日常工作中可能非常少见,因为可以被常规算法所取代,但是在问题达到一定数量级之后,常规算法是很难搞定类似问题的,可以说线段树是高级算法中非常低调的一种,也许在某些关键时刻能让你化险为夷。 线段树简单的说就是对一个序列每次从中间划分为2个区间,然后依次划分子区间。如图: 先看下维基百科的说明: ...原创 2018-10-24 11:30:20 · 3227 阅读 · 0 评论 -
连连看游戏消除算法
今天在收到一道的面试题,觉得比较有意思,决定记录下来,整个题目与解答过程大概如下。连连看是一种很受大家欢迎的小游戏。下面四张图给出了最基本的消除规则:图 A 中出现在同一直线上无障碍的圈圈可以消除;图 B 中两个圈圈可以通过一次转弯消除;图 C 和图 D 中,两个圈圈可以通过两次转弯消除。已知以下接口,表示位置(x, y)上有无障碍物:int isBlocked(int x,...转载 2018-10-09 15:47:52 · 14688 阅读 · 4 评论 -
一次看懂进制转换(阶乘是关键) - HDU 2031
说起进制转换,最常见的莫过于十进制与二进制的转换操作,因为经常要进行位运算,位运算性能一般都会优于整数运算,对于追求性能的童鞋不可谓不争之地。 对于二进制的转换,我们通常有这样的公式,例如对于一个二进制111001,转换为十进制\(x\):$$x = 1\times2^5+1\times2^4+1\times2^3+0\times2^2+0\times2^1+...原创 2018-10-14 21:29:25 · 3805 阅读 · 0 评论 -
涂色游戏Flood-it!(IDA*算法) - HDU 4127
做题之前,可以先到下面这个网站玩一会游戏:https://unixpapa.com/floodit/?sz=14&nc=6 游戏开发里面,比较常用的一个搜索算法是寻路算法,寻路算法里面用的最多的是A*算法以及很多优化的A*算法,对于只有4个方向的寻路算法,之前在网上见到有A*的位运算优化,性能非常高,1ms能处理上百个格子的地图寻路!很多MMORPG网络游戏都会应用这些算法,如...原创 2018-09-19 15:40:39 · 4743 阅读 · 0 评论 -
勇者游戏(巴什博弈)- HDU 1846
博弈算法中比较经典的一个博弈问题是巴什博奕,巴什博弈是这样的: 有一堆物品,数量为n,两个人轮流取,规定每次最多取m个,最少取1个。 我们定义先取者为F(first),后取者为S(second) 网上讲的很多不是很容易理解,我来讲一个非常容易理解的思路。 推理1:显然,如果n=m+1,那么由于一次最多只能取m个,所以无论F拿走多少个,S都能够一次拿走剩余的石子,S取...原创 2018-09-24 10:33:59 · 2832 阅读 · 0 评论 -
算法合集 | 神奇的笛卡尔树 - HDU 1506
原文地址:https://cs.v8cloud.cn/article.html?blog_id=225 笛卡尔树是一个很有意思的树形结构,因为它同时满足两个性质,从key(key就是索引位置,如下图中9的key为1,3的key为2......)来看,满足二叉搜索树的特性,从value来看,满足堆的性质。 重点参考下图,图片来自维基百科,还算是能够比较形象的...原创 2018-09-12 14:36:55 · 10167 阅读 · 3 评论