随笔分类 - OI
摘要:时隔半年回来做模拟题。 这道题看上去就非常的暴力了,讲道理暴力+卡常72分。 但是满分也不难拿(现在的想法),我们来看看。 显然任意一条权值非零的路径,我们都可以用来免费一波。 我们可以在原图预先floyd跑一下最短路,然后对于接下来的操作,只需要改变一些东西即可。 考虑floyd的dp意义: cp
阅读全文
摘要:只能说还是不会状压dp。。 这道题看上去很熟悉,就是n国王问题,只不过多了一些限制。 题目还会给你一个地图,告诉你那些地方不能放国王,那么用二进制存下来这个状态,判断的时候&一下即可。 这道题的国王的手变长了,是上下左右各两格,所以我们在定义状态的时候应该注意,在判断不可能的解的时候要左移和右移两位
阅读全文
摘要:终于认识了什么叫做期望。。 这道题题目挺长的哈,看上去又是期望又是图论的样子。 但是图论方面只需要做个预处理,然后就可以用dp弄进答案。 在教室之间移动,有脑子的都不会走弯路更累吧,所以最短路走一波。 然后就是dp的事情了。 设$dp[i][j][0/1]$是第$i$个时间段,从开始到现在(包含现在
阅读全文
摘要:神奇的位运算啊。。。 这道题显然不能用普通的回溯法解决。我们可以使用位运算。 框架同样采用dfs,但是使用了4个东西作为参数(使用二进制): 1. 作为当前在哪个位置已经放置了皇后(1表示已经放置,0表示可以放置) 2. 作为 当前已放置的皇后的左上右下对角线对当前行的影响(1表示不能放置,0表示可
阅读全文
摘要:我想是人生第一道分块。。。 这道题看上去很简单,暴力随便打,30分拿到手。但是显然你拿30分你就炸了。 我们开始考虑优化。 发现每一个%都是风马牛不相及的,我们考虑转换。 可以发现取膜的性质: $$a \mod b = a b \times \lfloor \frac{a}{b}\rfloor$$
阅读全文
摘要:状压dp还不熟啊。。。 这是状压dp例题后面的基础练习题了。可以看“互不侵犯”这道题。 状态表示方法类似,只不过没有第三维即数量的限制:设$dp[i][j]$为前$i$行,第$i$行状态为$j$时的方案数。 状态转移方程简直不能再简单:$dp[i][k] = sum(dp[i 1][j])$,其中$
阅读全文
摘要:单调队列双倍经验系列。。 这道题就是所谓的滑动窗口问题。 我们对于最大值询问,就维护一个单调递减的单调队列,队头就是最优解。 最小值同理。 注意:在队列中我们要传入每个元素进入的时间,这样才能实时从队头弹出元素,才不会WA。 有一个坑点:当$k=1$时,不能对第一个元素进行特殊处理。好坑啊。。。 代
阅读全文
摘要:第二道单调队列。 这道题就是经典的滑动窗口问题了。要求你求某一个数的前$m$位中的最小元素。 先说一句话: 单调队列中,队首保存的是最优解,其实是次解,以此类推 。 所以我们可以构造一个上升的单调队列,队首弄出来的就是答案。 元素的加入不用说,就是那样子。 重点是这里多了元素的删除。因为窗口的长度有
阅读全文
摘要:人生第一道单调队列! 我曾经给自己提出过这么一个问题,但是解决不了。没想到单调队列搞一搞就好了。 这道题就是要你找出一个数中右边的最靠近的一个比它大的数字,输出它的下标。 $O(n^2)$的方法就是暴力,57分。我们看看如何使用单调队列解决。 我们可以维护一个下降的序列,在单调队列中。 如果一个新元
阅读全文
摘要:终于把去年完全不懂的题做出来了!激动! 这道题可以说是很经典了。即使去年的题,还是经典! 题目叫你维护一个矩阵,每次操作支持删除掉第$x$行第$y$列的数字,然后自动执行两个动作: 1. 向左看齐。每个同学如果左边有空位的话就向左移动一位。显然这个操作过后空位会在第$x$行第$m$列。 2. 向前看
阅读全文
摘要:新手初学状压dp,厉害了! 首先,养成一个思路:数据这么小?状压dp! 然后~~翻题解~~可以这么定义状态: 定义$dp[i][j][k]$为 前$i$行中,第$i$行状态为$j$,前$i$行已放置$k$个国王 的方案数。 显然一行的状态只与前一行的有关,所以只需要记录一行的状态。 但是一行的状态好
阅读全文
摘要:毒瘤数据!!! 我能说我被这道题卡了三四天吗。。。 这道题就是给你二维坐标,让你求总矩形面积,覆盖的面积只算一次。 本来想用二维的线段覆盖,结果因为chen_zhe大佬的数据加强过不了了。 所以只能够使用矩形切割算法。 其实理解了也简单,都不用说,自己看代码就懂了。 不过注意的是:这道题要用long
阅读全文
摘要:二进制题目,第一次正式接触二进制操作。 因为水杯只有水量相等的才能合成,所以一定是$2^i$。 这种标志可以用二进制表示,每一位刚好就是上面的表达方式。 把题意翻译到二进制数字上就是: 二进制上为1的位数数目 。 那么问题终于来了:如何数出一个二进制数字上1的多少? 这里有两种方法。 1. 暴力的。
阅读全文
摘要:很气哦这道题。 这道题虽然看上去好像是考你的高精度,其实只是考你二进制和字符串。 不说别的,看这个$1 \leq n,m \leq 5 \times 10^6$,问你虚不虚? 所以我们要找一个效率极高的算法弄过这个二进制。 其实最省时间的应该是操作3和4,乘2和除以2只需要左移和右移即可。~~但我没
阅读全文
摘要:基础还是没打牢啊。。。 这道题就是给你几个线段,问你合并后的线段总长为多少。 做这种题的时候用膝盖想就知道要离散化,以$l$为关键字从小到大排序。 其实这样排序之后,每一条线段与紧接着的下一条线段就只有三种情况: 1. 当前线段右端点比下一条线段左端点小。这种情况,这些线段就没有交集是吧,所以我们可
阅读全文
摘要:终于学到了欧拉函数,咳出血。 有一个前置题目: "P1170 兔八哥和猎人" 。 上面这道题目问你平面上的两个点是否能够无阻碍地相互看见。 答案是横坐标差绝对值与纵坐标差绝对值,这两个数 互质 ! 所以这道题也差不多,能看见的也只有互质的。 但是$N \leq 40000$,每个点算出gcd再判重好
阅读全文
摘要:普及 都不会做,我退役吧。。。 这道题给你直角坐标系上的两个点,问你他们是否能够互相看见而不被其他的点挡到。 "luogu题解" 这道题很坑,我真的以为就是判断左右八个点,结果爆零。 其实斜斜的看也能观察到。题解里面说了。 两个点之间要不被看到,是不是前面一定要有点挡着你? 那么你只要不是路径上的第
阅读全文
摘要:水题刷成模板题。。。 这道题本来方程不难想的。 设$dp[i][j]$为前$i$位中添加了$j$个乘号的乘积最大值。 状态转移方程:$dp[i][j] = max(dp[i][j], dp[k][j 1] \times sp[k + 1][i])$ 初始状态为$dp[i][0] = sp[0][i]
阅读全文
摘要:好丢脸啊!普及dp都做不出来! 这道题应该要倒推来做dp。 别人说顺推也可以,但我又不会刷表啊!刚才刷了一遍全部WA。 那我们就乖乖地倒推。 我一开始想定义状态的时候就错了。只需要定义$dp[i]$一维就可以了,因为这些任务一定会被做。 我们考虑的有两种决策: 这一分钟没有新任务的开始。那我们就歇着
阅读全文
摘要:优美的尺取法!!! 这道题看到判断相同的字符串,用pp想都知道用hash。 其实重点在第二问:如何用较小的时间复杂度来实现题目中的 最小距离包含最多要背的单词 。 这个时候就需要找到一种算法,这种算法名字叫做 尺取法 。 从 "别人的博客" 偷来三张图: 算法核心思想就是上面写的那样: 1. 初始化
阅读全文

浙公网安备 33010602011771号