02 2018 档案
摘要:转载自 "后缀数组 学习笔记" %E8%AE%B2%E8%A7%A3.html) 后缀数组 最详细(maybe)讲解 后缀数组这个东西真的是神仙操作…… 但是这个比较神仙的东西在网上的讲解一般都仅限于思想而不是代码,而且这个东西开一堆数组,很多初学者写代码的时候很容易发生歧义理解,所以这里给出一个比
阅读全文
摘要:笔者一个数据结构的蒟蒻还是奇迹般的搞明白了splay的基本原理以及实现方法,所以写下这篇随笔希望能帮到像我当初一脸懵逼的人。 我们从二叉查找树开始说起: 二叉查找树是一棵二叉树,它满足这样一个性质:所有小于当前节点的点都在该节点的左子树上,所有大于当前节点的点都在该节点的右子树上。对于和当前节点一样
阅读全文
摘要:由于笔者太懒,懒得把原来的markdown改成MCE,所以有很多奇怪的地方请谅解。 先说nim游戏。 大意:有n堆石子,两个人轮流取,每个人每次从任意一堆取任意个,直到一个人无法取了为止。问对于石子的情况先手的输赢。 这看上去无从入手,但是仔细想想还是有法的。 我们从最终态逆推,首先考虑(0,0,0
阅读全文
摘要:考虑如何建图。还是老样子先拆点,然后把每两个点之间连接两条边,一条流量为1,费用为-点权,处理是否走这个点。一条流量无限,没有费用,因为哪怕一个点选过了,它的地方还是可以重复走过去的。 然后把经由一个点能到达的另一个点连边。因为要走k次,所以由s向1号点入点连边,n号点出点向t连边,流量为k,费用为
阅读全文
摘要:蒟蒻现在连DP都做不出来了,就只能做一些XJB贪心题,这个题题目向非常友好,100的数据范围一看就是让你跑O(n^4)的做法的,然而实际上并不是那么多,大约是,额,反正要快不少。 没什么好说的,直接枚举矩形的左上右下寻找出所有的矩形,然后暴力枚举出最大的那个就可以了,要注意矩形的顶点可能覆盖了某些点
阅读全文
摘要:在肖明 #神#的推荐下,我尝试了这个题,一开始想的是暴力枚举所有的点,然后bfs层数,试着和肖明 #神#说了这种方法之后, #神#轻蔑的一笑,说这不就是一个贪心么,你只需要先建树,然后从底下向上遍历,够了B个点就算作一个省。 #神#的话让我豁然开朗,这个题貌似真的不是那么难诶。 然后#神#回去写作业
阅读全文
摘要:我今天脑子貌似又好使了一点,可以做一做DP中的水题了。 这个题难度蓝色,纯属是做的人太少了虚高。 这个题很显然的是可以用一个顺序一个逆序这两个大水转移方程轻松转移出到达这个地方最少需要的棋子数量,然后因为n足够小,直接枚举每一个偶数坐标,对于可以由红色棋子走到的,就把总数++,不可以的,就把一开始要
阅读全文
摘要:做完了这个题的我一口老血喷在屏幕上。。。 这个题难度不高(~~胡扯~~),就是爆搜就可以了,然而。。判断条件灰常多,剪枝也就非常多。。然而,这些判断条件又不得不必须满足,所以也就十分容易错。。。 说一下我都是怎么错的吧。。。 ##1:眼瘸少看到一个条件。。。 ##2:犯傻以为不加这个地方的数字是否用
阅读全文
摘要:这个题真是。。。 不想说什么了,及其复杂和烦人的一道题。基础思路就是bfs,用两个队列分别进行0的位置的计算和每一步的状态。。然而这个题最重要的一点在于判重,实际上可以康托展开用全排列的个数进行判重,这样也貌似好操作一些,但是时间短技术差想不到怎么办,通过计算空间,我们发现,可以暴力开一个9维boo
阅读全文
摘要:这个题乍一看就应该是DP,再看一眼数据范围,1000.。那就应该是了。然后就向DP的方向想,经过对小数据的计算可以得出,如果我们用f[i][j]来表示前i个数有j个是填了"<"的,那么f[i][j]显然可以表示为f[i][j]+=f[i-1][j]\*(j+1)+f[i-1][j-1] (i-j).
阅读全文
摘要:这个题看上去高大上,实际上就是一个大水题。怎么说呢,这个题思路可能比较难搞,代码实现难度几乎为0. 首先我们可以发现这是一棵树,然后问其中任意一条边左右两边的点的数量之差的绝对值,实际上,无论两边的点是多少,我们都可以用abs(n-2*x)(x代表这条边的一个端点的儿子的个数)算出来,这样我们就减少
阅读全文
摘要:看到题了不首先应该看看数据范围确定一下算法么,这个题的数据范围大约可以支持到O(nmlogm),所以肯定不是搜索什么的,DP貌似至少也要n^2m,所以可以想一些其他的。对于题目的输入,我们发现这些输入很像是图论里的,所以可以稍微想一想,但是点的个数略多,直接跑边。。这个图貌似挺稠密的,所以也不行。这
阅读全文
摘要:一道DP,思维难度真是不小。 首先对于这个题的数据,我们可以发现差不多可以支持n^2logn,但是貌似也不会有这种复杂度的线性DP(至少这个题看上去不是这样)。所以我们考虑N^2做法。因为求得是价值和,所以很明显要使用前缀和。 我们用f[i][j]来表示从下往上i枚硬币时轮到第一个人选,上一次对方取
阅读全文
摘要:想说这个题要是想做出来就必须不干一件事情,那就是不要点开标签。。点开标签看到那些平衡树什么的。。。。 首先,我们要理解这个题的题意。买彩票是什么大家都应该知道吧,一般来说,就是从很多数里面选出来几个,然后系统,额……就是那个有一堆球的机器,弹出来几个球球上的数字就是中奖数字。 对于这个题,我们要是选
阅读全文
摘要:实在不明白难度等级,难不成前缀和是个很变态的东西? 说白了就是单调队列裸题,都没加什么别的东西,就是一个前缀和的计算,然而这个题也不是要用它优化,而是必须这么做啊。
阅读全文
摘要:这个题很友好,我们可以分别进行简单难度,中等难度,恶心难度来做。然而智商没问题的话肯定是用单调队列来做。。。 板子题,直接裸的单调队列就能过。
阅读全文
摘要:这个题,题目很长,然而亲爱的翻译已经帮你读完题了,一句话题意。 要求不下降的最长,那么这一段肯定满足队首的左区间不大于队尾的右区间,单调队列容易求解。
阅读全文
摘要:终于把这个题缸出来了,话说这题也不是想的那么难。。。 因为最小的最大,所以二分,因为由前面推出后面,所以DP,因为输入单调,朴素DP会T,所以单调队列。要注意的是,这个题数据很大,要开LL,然后DP数组每次要清为一个大负值,因为输入中有负值。然后单调队列的使用还是有些清奇的地方,待会看代码吧。
阅读全文
摘要:这个题乍一看觉得挺简单的,事实上却完全不是。首先,这个题看上去无脑直接刷就可以然而因为刷的次数远远大于木板的个数所以不行,然后开始考虑DP,自己一开始是这么想的,如果用f[t][i][j]表示刷t次时,前i块板子刷到第j个最大值是多少,然后前缀和优化了一小下,勉强打出了二逼DP,然后90,之后从网上
阅读全文
摘要:这个题看上去状态比较多,实际上由于题目的输出需要,又因为是一个线性的结构,所以我们可以有一些操作。 这么想,如果我们有了一个满足条件的区间,此时我们缩减左端点,然后判断此时是否还是满足,满足就继续缩减,不满足就伸长右端点,直到下一次又满足条件为止,复杂度差不多O(N)。
阅读全文
摘要:过了这题我就想说一声艹,跟这个题死磕了将近6个小时,终于是把这个题死磕出来了。首先看到这个题的第一反应,和当初做过的一个房间最短路比较相似,然后考虑像那个题那样建边,然后跑最短路。(具体建边方法请参考那个题,这个题比那道的建边还要简单一点)。然后考虑的可能的点的数目比较多(有最多4000)个,于是就
阅读全文
摘要:一激动一颓就会忘了总结。。。 前面的大黄题就不总结了。 这个题我只想说一声艹,一开始的思路就是正确的,然后计算的时候有了一个瑕疵,不过很快也就改过来了。然后却一直连样例都过不了。仔仔细细看了老半天,经过了半个小时之后,忍不住瞄了一眼题解,突然觉悟到自己的前缀和打错了。。。。。。。 附前缀和计算方法:
阅读全文
摘要:这个题我很无语,一开始看绿题,还是数论,应该不会特别简单,应该要动笔写上好一会,过了一会旁边 #祝神 说这原来是个蓝题,我顿时觉得十分迷茫。。。 结果看了这个题看了一会,仔细一想,woc,这题怕不是可以暴力出解,况且这个范围确实也够了啊,妥妥0ms出解。。就试着打了一下。。然后T两个点。。。过了一会
阅读全文
摘要:话说正解是单调栈优化DP,然而貌似根据某种玄学的推算,这个题暴力出解貌似也是可以的。首先,我们枚举所有的点作为最小点,然后横向展开,遇到更小的就停止。。。然后再操作一下,看上去时间O(N^2),然而由于数据的随机生成性,差不多能做到O(NlogN)出解,然而由于数据的过于随机性,这么做比正解还要快。
阅读全文
摘要:这个题看上去本来不好处理,然而善意的题面已经基本告诉你做法了,小时候玩的那个游戏就是代码的核心。动动脑子想想,如果长和宽的积是奇数,那么一定要先手,如果是偶数,那么后手就会获胜。 好了,那么怎么处理对称情况呢,随便画一个小棋盘试一试,很容易得出是x-i+1和m-y+1。这之后就是颜色的问题了,因为题
阅读全文
摘要:这个题代码难度几乎为0,然而思维难度对于蒟蒻来说简直是突破天际啊!首先我思考的是这个油漆的种类只有15种,是不是可以像一道叫做8数码难题的东西暴力15维数组呢。。计算发现不可以。。。。空间会直接让你学会做人,然后就是看到每种油漆最多有5桶,所以自然想到把这几桶分别有几种油漆作为状态转移,然后,蒟蒻就
阅读全文
摘要:一眼看上去这个题就要DP,可是应该怎么DP呢,我们发现,数据范围最多支持O(NlogN),但是这种DP貌似不怎么有,所以应该是O(N)算法,自然想到单调队列优化DP。 然后我们先考虑如果不用单调队列应该怎么转移,那么f[i]=min(f[k]) (i-k>m)+(a[k]<=a[i])。而min(f
阅读全文
摘要:楼下那篇题解说实话就是什么都没说,所以我再发一篇正常一点的。 楼下思路大体是正确的,但是之所以是说什么都没说,是因为他有两个比较致命的遗漏。首先是点,这里的点不是平时我们认为的点,如果多少接触过对偶图很容易看出来,这个题实际上要把每个三角形当作点,而把有临边的三角形连边,这样我们就可以大体上得到一棵
阅读全文
摘要:水一发优先队列的水题。。 这个题貌似以前有做过类似的。具体的方法是用大根堆辅助贪心算法得出正解。可以看出来,如果小Z走到了某个地方,那么他最远一定是到了这里,不可能有再走回来这种操作,因为很明显那样不是最优解。 然后我们基于刚才的考虑贪心,如果走的远近确定了,那么我们的选择一定是最小的那些店,维护一
阅读全文
摘要:来一道数论题吧。 这个题一眼看上去思路明确,应该是数论,但是推导公式的时候却出了问题,根本看不出来有什么规律。看了马佬题解明白了这么个规律貌似叫做欧拉函数,于是就去百度学习了一下这东西。 欧拉函数的含义就是给一个数n,求所有小于这个数中与这个数互质的数的个数。 具体的解释就直接搬运他人的吧。 欧拉函
阅读全文
摘要:蒟蒻的第二道树形DP,话说看了这个题的正常做法之后一脸蒙,森林转二叉树??什么诡异的操作,蒟蒻完全没明白那个原理是啥。。。可能是当初没好好学吧。。不管了,索性直接DP。 不难看出,这个题的DP方程和刚才那个大差不离,就是刚才那个题可以直接知晓应该留多少条边而这个需要计算一下罢了,考虑搜索中进行儿子数
阅读全文
摘要:蒟蒻弱弱的开始做树形DP了,虽然做了这道题还是有很多不懂得地方。 这道题大意就是有一棵树,只保留其中q条边,求出剩余边的最大权值。 然后开始考虑怎么做(其实是看着题解出思路。。。。),很容易可以想出DP数组应该代表什么含义。用f[i][j]表示第i个子节点保留下面j-1条边能达到的最大苹果数量。 为
阅读全文
摘要:这个题真是。。。看了一会之后,发现有一丝丝的熟悉,再仔细看了看,R,这不是那个将军令么。。。然后果断调出来那个题,还真是,而且貌似还是简化版的。。。于是就直接改了改建树和输入输出直接交了。。阿勒,就20分。。真是不给面子,于是就继续简化了代码。。。然后又交,变0分了。发现建树的时候双向边里面放了顺序
阅读全文
摘要:首先,我们要读懂这道题,否则你会和我一开始产生一样的疑问,把所有的数都取走剩下一个最小的不就可以了么???然后我们发现样例完全不是这么回事。题目中所说的使相邻的两个数没有公共边,是指你去走的数,也就是取完之后矩阵里的空白格子。明白了这一点,我们可能会有一个比较基础的贪心思想,没错,就是隔一个取一个,
阅读全文
摘要:绝对难度虚高的一题 看到题目,至少损坏几个房子,开始考虑最小割,建的是双向边,所以拆点,边权除了自己与自己的之外都连inf。然后把所有求救的点都连到超级源上,跑一遍最大流就可以了。
阅读全文
摘要:这个题刚看上去就让人不禁想到一道叫做方格取数问题的题目,事实上也就是这么做,对棋盘黑白染色,然后黑格子连源点,白的连汇点,点权为1。然后判断一下黑格子能影响到的白格子,边权为inf,跑一遍最大流就可以了。 笔者惨痛的实践证明,虽然这些题的,额。。DINIC都一模一样,但是不要复制粘贴。。。粘过来一个
阅读全文
摘要:看到题目,产生第一反应,是否可以匹配的是这么多。那么连边跑一遍最大流就行了。 从源点向每个单位连一条长度为l的边,然后所有单位和餐桌分别连边,流量为1,所有餐桌向汇点连边,流量为餐桌容量。然后跑一遍最大流即可。 输出方案的时候直接暴力枚举一个单位的所有出边即可,如果不为0,那么说明使用过,即可输出。
阅读全文
摘要:笔者在写作这篇笔记之前做了整整两天的最大流,然后。。。发现网络流24题里有很多怎么看都是不可做的题目,于是solution了一把,发现要去切一下费用流这个东东,于是借鉴各种blog和题解,现在勉强搞懂了这个东西,所以作一篇笔记聊以记录和日后复习。 如果您还没有学习网络流的基本概念,请出门左转百度吧。
阅读全文
摘要:学姐说什么DINIC自己学她就不讲了。。。然而这是啥东西我都还不知道。。百度了一下发现是网络流的一种实现方式。。蒟蒻就被逼无奈的啃这个不好吃的网络流了。 首先说一下什么是网络流吧:算了不想说了,蒟蒻是从某大佬的博客中学会的,挂上大佬的博客链接。。实际上百度第三个就是。。 "这里" 然后蒟蒻就开始做题
阅读全文