自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ACM算法日常

专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、软件设计等。

  • 博客(47)
  • 收藏
  • 关注

原创 新手入门 | 算法书籍推荐

算法书籍 公众号设立以来,很多同学都在问如何入门、提高,以及有什么好的算法书籍可以学习。这周空闲时间我就大概在网上整理了一下,由于每个人的性格、学习习惯都不一样,不能针对个人情况来推荐,所以这里给的算法书籍仅做参考哦。 另外需要注意的是,这里给的书籍路线更偏向于普通意义的学习,而不仅仅是针对算法竞赛,公众号前期还是主要针对大学刚入门的同学,这样对于...

2018-08-19 14:23:40 47189 5

原创 啃完这些算法书,你就是大神!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWgDgbGm-1618545716467)(https://oss.v8cloud.cn/markdown/e7dc0f4374fd4df7ae807c01dfe2fe18.png)]算法书籍的重要性学习算法,很重要的一点在于有一本好的算法书籍可以查阅。就比如说最经典的算法导论,拥有此书,你可以保证自己的算法无懈可击,不会出现严重问题,因为书上的东西经过了成百万上千万的读者查阅,写作者有能力证明自己的算法的正确性。相对于

2021-04-16 12:03:00 1067 1

原创 Github开源:几千题的算法竞赛新手路线图!

今年年后立了一个Flag(2021学习计划,新的开始),是希望整理一条路线,让算法学习过程更加有梯度,让算法入门不再那么艰难,在写完那篇文章之后,我便开始着手规划如何去做这样的一件事情,想来想去,感觉靠谱一点的做法是做一个开源项目,这个项目能够整合目前所有OJ的题目资源,然后分门别类的整理一条从易到难的路线。算法·进阶石开源项目名称叫做算法·进阶石(algorithm-stone),寓意学习算法是一个长远的事情,每一步都是一小块石阶,通过这些小石块最终能走的很远。开源地址:https://githu

2021-03-19 07:50:36 4003

原创 应届生面试建议

最近有个朋友面试腾讯的实习岗位,结果不是很好,聊了之后发现新手很容易掉各种坑里,这里简单整理一下初次实习或者面试容易碰到的问题,只要几分钟时间你就能看完,但是每一点都很重要。很多人问我工作了没,这里介绍一下我自己,我是dansen,工作了很多年,一直从事游戏方面的开发工作,去过很多公司面试也当过很多次面试官,现在在武汉一家小游戏公司做开发,待遇还可以,和某乎上那些人不能比,但是也够混口饭吃。寻找工作机会初次找工作机会,最重要的是简历,这时候一份亮眼的简历能够最大限度的拿到面试机会。简历除了基本信息,需

2021-03-07 10:43:56 5124 4

原创 如何将宇宙最强vscode打造为刷题神器

不知道各位童鞋平时刷题用什么工具,我平时都是用vscode,除了刷题,平时工作大部分也会使用vscode,因为这个工具插件非常多非常方便,UI也很美观,除了编辑还支持大部分语言的调试,基本上都是零配置就可以使用。那么让我们一起来看看这款宇宙最强刷题神器吧。下载和安装首先我们需要下载和安装vscode,直接在官网下载。下载完成后双击安装。安装时记得勾选如下选项:这样可以在命令行中使用vscode,也可以右键文件或者文件夹进行编辑。初次使用vscode第一次启动会显示欢迎使用的界面,这个界.

2021-03-03 20:43:54 2823 3

原创 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 1404

原创 算法竞赛进阶指南 - 位运算3题详解

算法进阶指南看了开头一部分,个人感觉讲解的比较透彻,于是打算写一些个人的读书笔记,主要是做题后做一个总结,不求快,但求能一点点讲清楚每个知识点。这一节来看看第一章的位运算部分。算法进阶指南的的题目都在AcWing上面,这里就按照AcWing上的题号来写题目编号。题目89、求 a 的 b 次方对 p 取模的值。题意:如题,就是求ab%pa^b\%pab%p。这道题也是快速幂模板,作为书中的第一道例题,有必要重新看一下快速幂的原理。比如求313%1003^{13}\%100313%100,这里a是3

2020-12-19 21:50:59 504 1

原创 Leetcode 周赛题解 215

今天的leetcode最后一题是动态规划,比较难,适合对DP比较熟练的童鞋去完成,讲起来也比较费劲,这里就只讲下第二道和第三道题,第一道水题略过。5603. 确定两个字符串是否接近题目内容:如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :操作 1:交换任意两个 现有 字符。例如,abcde -> aecdb操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。例如,aacabb -> bbcbaa(所有 a 转化为

2020-11-23 08:58:19 714

原创 Leetcode 周赛题解 216

leetcode 第 216 场周赛5605. 检查两个字符串数组是否相等题意给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。示例1:输入:word1 = [“ab”, “c”], word2 = [“a”, “bc”]输出:true解释:word1 表示的字符串为 “ab” + “c” -> “abc”word2 表示的字符串为 “a”

2020-11-23 08:55:05 369

原创 Effective C++条款3 我可以不使用const?

前言const是C++中用得非常频繁的一个关键字,但是如果你不使用这个关键字,对程序的运行结果可能影响不大,那么,我可以不使用const吗?一开始,拒绝使用const的最大原因可能是认为这个关键字比较鸡肋,因为它不会对程序产生实质影响,而且很繁琐,变量加上const关键后只能调用const类型的函数,极不方便。但是为了安全,推荐使用const,这是一个良好的习惯,坚持下去的结果是你的代码将变得更加健壮,当然你也可以不使用const,只不过当代码量到一定程度后,你的代码可能会变得比较脆弱,而且随着量级

2020-10-11 21:59:36 343

原创 如何准备信息学算法竞赛? ——我是如何赢得美国信息学奥林匹克竞赛3届金牌的

如何准备程序竞赛?我是如何赢得美国信息学奥林匹克竞赛3届金牌的作者:Andrei Margeloiu,2017 Google HashCode竞赛金牌获得者高中第一年,我从0开始学习了C++。一开始我对编程、算法和数据结构一无所知,几个月之后我才开始写代码,当时计算机信息学奥林匹克竞赛来了,正好我可以试试我的学习方法是否有效。经过2天的比赛,我赢得了金牌。我很震惊,因为我超过了有5年经验的参赛人员,我知道我很努力,但是这个成绩超出了我的期望。这个比赛很适合我,我也因此全心参与其中。我知道是什么

2020-08-11 20:45:38 4260

原创 最短路专题2 | CodeForces 449B - SPFA算法

深入解析SPFA最短路算法及优化,最短路算法系列文章

2019-12-25 08:26:27 1619

原创 最短路专题1 | CodeForces 601A - 混合Dijkstra算法

最短路专题1 | CodeForces 601A - 混合Dijkstra算法前言这个十一没有出去玩,花了一些时间在写之前提过的markdown编辑器,本文就是用这个编辑器写的2333,今天准备写咱们的新专题 — 最短路。另外之前提过专题的题目主要使用kuangbin系列,现在改变主意了,专题题目全部使用CodeForces上的题目,原因主要是POJ等国内的OJ系统不能看源代码,而且题目质量稍...

2019-11-27 08:42:02 1184

原创 一个新的markdown编辑器

前言最近一段时间没有更新文章,因为业余时间都在写一个markdown编辑器。市面上有很多各种各样的编辑器,但是或多或少存在一些问题,对于一个轻度强迫症患者而言,在使用了一些编辑器后,还是转为自己手写了一个简单的markdown编辑器。不同的markdown编辑器比较个人感觉使用最方便的编辑器是Typora,因为是实时编辑和预览的,也就是说,不需要额外的预览界面。但是Typora也存在一些问题...

2019-10-27 14:33:23 958 1

原创 DP专题9 终 | 机器人 HDU -4576(概率DP)

本篇是一个概率DP问题,也是DP专题的最后一篇,概率DP是DP中一个较为特殊的算法问题,混合了概率这个元素在里面,需要对概率有比较好的理解。概率DP问题很多时候会和复杂的概率计算混合在一起,要想更好的掌握只能多做相关题目,熟练掌握概率相关的知识也是很重要的一步。概况DP是混合了概率计算和DP结构的一种算法。本篇是一个入门题目,希望能够让没接触过概率DP的同学有个简单了解。...

2019-08-21 21:59:25 1175 1

原创 DP专题8 | 骨牌摆放问题 POJ 2411(状态压缩DP)

题目:给你n*m(1<=n,m<=11)的方格矩阵,要求用1*2的多米诺骨牌去填充,问有多少种填充方法。比如下图是对于如下2x6的方格矩阵,可能的填充方案之一。该如何使用动态规划的方式解决这道题呢?先了解一下状态压缩算法。状态压缩通常是使用一个整数来表示一个集合,比如整数3,二进制表示为11,第一位状态为1,第二位状态为1,数字2的二进制表示为...

2019-08-06 22:07:53 3188

原创 DP专题7 | 没有上司的舞会 洛谷1352(树形DP)

本篇继续咱们的DP专题,树形DP入门。动态规划每一个类型的DP都是深坑,期望童鞋们自己在这个系列的基础上多花时间进行拓展,学习愉快~在讨论树形DP之前,我想介绍一个比较有名的学习技巧——费曼技巧,因为个人觉得可以尝试着用在咱们的算法理解上。费曼这个人本身是一个很有意思的人,做科研和教育都非常厉害,另外后人还根据他的个人经历拍了一部爱情片,是不是跨越有点大,好了,先说费曼定理。...

2019-07-25 21:24:38 1538

原创 DP专题 6 | 石子合并 CH5301(区间DP)

欢迎回来~继续我们的DP专题,上一篇我们讲了一个较为复杂的线性DP问题,这一次让我们看一看区间DP问题。区间DP直观上可以理解成对于一个区间计算最优解的问题。先来看下本题的题目,直接上中文。题目大意:设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代...

2019-07-22 21:02:37 3133

原创 DP专题 5 | 颜色的长度 - UVA1625(线性DP)

【题意】输入两个长度分别为n和m的颜色序列(n,m<=5000),要求按一定规则合并成一个序列,规则是每次可以把一个序列开头的颜色放到新序列的尾部。例如对于序列GBBY和YRRGB,它们可以合成很多中结果,其中包含这样两种结果,GBYBRYRGB和YRRGGBBYB,对于每个颜色c来说,其跨度L(c)等于新序列中颜色c出现的最大位置和最小位置之差,比如对于上面的两种结果,每个颜色的L(...

2019-07-17 21:21:30 3615

原创 DP专题 4 | 骨头收集爱好者 - POJ 1458( 0-1背包)

背包问题是DP里面变化比较多的问题,可以参考网上的《背包9讲》,另外还是阅读《算竞入门》和《算竞进阶》,讲的最全的肯定是背包9讲,基本上把所有变形都讲了一遍,但是把问题讲的最清楚应该还是算竞进阶,特别是本篇的0-1背包。进阶里面比较清晰的讲解了如何从二维数组变成滚动一维数组,讲解了为什么一维数组是倒序,而二维数组是顺序。进而也能很清晰的讲解完全背包问题。OK,还是回到DP的转移...

2019-07-14 16:28:15 1439

原创 DP专题 3 | LCS最长公共子序列 - POJ 1458

Common Subsequence(公共子序列问题)DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another...

2019-06-21 09:39:01 2661

原创 DP专题 2 | LIS最长上升子序列 - POJ 2533

这篇来看LIS~上题。POJ - 2533 Longest Ordered SubsequenceDescriptionA numeric sequence ofaiis ordered ifa1<a2< ... <aN. Let the subsequence of the given numeric sequence (a1,a2, ....

2019-06-13 19:32:41 4094

原创 DP专题 1 | 数字三角形 - POJ 1163

从本篇开始,准备做一系列的专题讲解,主要参考《算法竞赛入门经典》、《算法竞赛进阶指南》两本书。主要是为了能够更加系统的讲解各个知识点,这两本书已经讲得很好了,建议准备ACM学习以及想深入学习算法的同学购买。每一个专题都会持续比较久的时间,就比如拿动态规划DP来说,种类非常多,从浅入深可以说是一次深潜,刚开始可能还好,后面会比较困难~另外本号的更新频率一般是一周2-3篇,关注本号的童鞋...

2019-06-12 15:57:40 3394

原创 流问题Flow Problem(网络最大流)- HDU 3549

        网络最大流问题属于算法 里面较难的问题,因为牵涉的概念比较多,这一篇可能需要你花比较多的时间去理解,除了看这个,最好能多参考别的书籍或者文章进行比较学习,不然可能容易产生理解的偏差。         另外本公众号并不打算讲解过于复杂的问题,网络流问题已经严重超过了最初设想的五分钟限制,不过由于是第一篇网络流的题目,可以作为后面相关问题的基础,姑且多写点。如果你觉得一次难以看...

2018-12-26 11:48:59 5502

原创 独角兽与数列(置换群循环)- HDU 4985

群论是法国数学家伽罗瓦(Galois)的发明。伽罗瓦是一个极具传奇性的人物,年仅21岁就英年早逝于一场近乎自杀的决斗中。他用该理论,具体来说是伽罗瓦群,解决了五次方程问题。在此之前柯西(Augustin-Louis Cauchy),阿贝尔(Niels Henrik Abel)等人也对群论作出了贡献。 群是 集合G+运算符·,它结合任何两个元素a和b而形成另一个元素,记为a·b。符号"·"是...

2018-12-01 18:02:58 5475 1

原创 寻找整数(容斥原理) - HDU 1796

        看这题之前先复习一下容斥原理,不然肯定看不懂,呃,如果第一次接触容斥原理的题,可能弄懂了容斥原理你还是看不懂代码,是的,等会你就知道了。                容斥原理简介:在计数时,为了使重叠部分不被重复计算,人们研究出一种新的计数方法:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无...

2018-11-20 15:14:54 4048

原创 算法合集 | 无限的路(递推) - HDU 2073

       递推和递归有着很多的相似之处,甚至可以看做是递归的反向。递归的目的性很强,只解需要解的问题,递推有点“步步为营”的味道,不断的利用已有的信息推导出新的东西,而递归是构造出了一个通过简化问题来解决问题的途径。 递推在组合数学中有着典型应用。         本题是递推的示例题,之前算法合集(点击菜单)还有一些部分没有完成,后面还是接着一点点的完善! Problem De...

2018-11-16 18:59:31 3588

原创 朋友圈(拉姆齐定理)- 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 11618

原创 四两拨千斤,GCC编译器(同余模) - HDU 3123

对于两个数M和N,如果M%P == N%P,则可以说M和N对P同余。记作公式:M≡N(modP)同余这一属性看起来简单,然而却是数论中极为重要的概念。与之相关的公式和定理更是纷繁芜杂,如果不是数学背景的童鞋,恐怕很难深入去钻研所有的知识。我们这一篇作为一个简单的入门,用同余公式来解决一个阶乘问题。在做题之前,先来熟悉一个简单的公式:(M+N)%P=(M%P+N%P)%P(M+...

2018-11-06 08:36:16 4364

原创 海战(线段树)- HDU 4027

        这一篇是典型的线段树算法,这个算法在日常工作中可能非常少见,因为可以被常规算法所取代,但是在问题达到一定数量级之后,常规算法是很难搞定类似问题的,可以说线段树是高级算法中非常低调的一种,也许在某些关键时刻能让你化险为夷。        线段树简单的说就是对一个序列每次从中间划分为2个区间,然后依次划分子区间。如图:        先看下维基百科的说明:       ...

2018-10-24 11:30:20 3170

原创 一次看懂进制转换(阶乘是关键) - 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 3663

转载 连连看游戏消除算法

今天在收到一道的面试题,觉得比较有意思,决定记录下来,整个题目与解答过程大概如下。连连看是一种很受大家欢迎的小游戏。下面四张图给出了最基本的消除规则:图 A 中出现在同一直线上无障碍的圈圈可以消除;图 B 中两个圈圈可以通过一次转弯消除;图 C 和图 D 中,两个圈圈可以通过两次转弯消除。已知以下接口,表示位置(x, y)上有无障碍物:int isBlocked(int x,...

2018-10-09 15:47:52 14184 4

原创 勇者游戏(巴什博弈)- HDU 1846

博弈算法中比较经典的一个博弈问题是巴什博奕,巴什博弈是这样的: 有一堆物品,数量为n,两个人轮流取,规定每次最多取m个,最少取1个。 我们定义先取者为F(first),后取者为S(second) 网上讲的很多不是很容易理解,我来讲一个非常容易理解的思路。 推理1:显然,如果n=m+1,那么由于一次最多只能取m个,所以无论F拿走多少个,S都能够一次拿走剩余的石子,S取...

2018-09-24 10:33:59 2759

原创 涂色游戏Flood-it!(IDA*算法) - HDU 4127

做题之前,可以先到下面这个网站玩一会游戏:https://unixpapa.com/floodit/?sz=14&amp;nc=6 游戏开发里面,比较常用的一个搜索算法是寻路算法,寻路算法里面用的最多的是A*算法以及很多优化的A*算法,对于只有4个方向的寻路算法,之前在网上见到有A*的位运算优化,性能非常高,1ms能处理上百个格子的地图寻路!很多MMORPG网络游戏都会应用这些算法,如...

2018-09-19 15:40:39 4623

原创 算法合集 | 神奇的笛卡尔树 - 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 9986 3

转载 什么才算是真正的编程能力?

计算机科学有两类根本问题。一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等。理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。搞ACM的人,只练第一类。像你这样的更偏向于第二类。其实挺难得...

2018-08-29 14:10:10 2434

转载 浅谈ACM算法学习与有效训练

一、什么是有效地训练?  很多ACMer入门的时候,都被告知:要多做题,做500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。   我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。  其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,算是入门了吧,而且这500道题目中自己独立思考做出来的有多...

2018-08-25 15:36:37 14202 7

转载 新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?

搬运工,看到一篇关于算法学习之路的总结,希望对你有帮助。原文链接:zh.lucida.me/blog/on-le我的算法学习之路MAY 4TH, 2014 | COMMENTS 关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。原文作者:...

2018-08-18 20:08:42 38159 12

转载 程序员必须掌握哪些算法?

算法图搜索 (广度优先、深度优先)深度优先特别重要 排序 动态规划 匹配算法和网络流算法 正则表达式和字符串匹配数据结构图 (树尤其重要) Map 堆 栈/队列 Tries | 字典树额外推荐贪婪算法 概率方法 近似算法上面是 Arjun Nayini 的推荐,下面是 Ken George 的推荐注:下面这个没有特定优先级算法:三路划分-快速排序...

2018-08-14 08:16:15 3122

转载 推荐|10本不得不看的算法书籍,挖掘数据的灵魂!

全球人工智能:专注为AI开发者提供全球最新AI技术动态和社群交流。用户来源包括:北大、清华、中科院、复旦、麻省理工、卡内基梅隆、斯坦福、哈佛、牛津、剑桥等世界名校的AI技术硕士、博士和教授;以及谷歌、腾讯、百度、脸谱、微软、华为、阿里、海康威视、滴滴、英伟达等全球名企的AI开发者和AI科学家。文章来源:云栖社区 作者:薯条酱我们都知道对于软件而言,最为经典的定义就是程序=算法+数据结构,算...

2018-08-10 14:49:29 62685 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除