题目链接 (loj) https://loj.ac/problem/2734 (luogu) https://www.luogu.org/problem/P3615 题解 嗯,考场上肝了\(3h\)然而最后发现一个智障地方没想到--我果然还是菜的真实啊 首先队列合法(能在\(N\)分钟内解决)当且仅当: 每一个长度为偶数的后缀女生数量都不少于一半(一个等价的表述是,如果把男人看成\(1\)女人看成\(-1\)那么任何一个后缀和不大于\(1\), 但是这里由于是对女生操作所以只考虑女生会好很多).…
题目链接 https://loj.ac/problem/2731 题解 首先一个很自然的思路是,设\(dp[i][j]\)表示选了前\(i\)列,第\(2\)行第\(i\)列的格子是第\(j\)个被填上的. 还要加个第三维\(0/1\),表示第\(2\)行第\(i\)列不是/是这一列最后一个被填上的(这决定了它是被上下填上还是被左右填上). 转移: 若第\(2\)行第\(i\)列是棋子,则所有的都转移到\(f[i][0][0]\). (1) \(0\rightarrow 0\), 两个互不影响,…
题目链接 https://loj.ac/problem/2733 题解 神仙题-- 首先可以观察到一个结论: 目标块的两块小三明治一定分别是最后和倒数第二个被吃的. 由此我们可以考虑这两块谁先被吃.这样的好处就是,起初我们一个块被吃的依赖条件是某两个块中有一个被吃就行,现在两个块中的某一个已经钦定了比它更晚,另一个就一定要比它早,这样依赖关系就形成了一张图. 那么有一个\(O(n^4)\)的做法: 对于每一个块枚举先吃哪个小三明治,然后DFS求出要先吃这个三明治需要吃掉哪些三明治. 下面还有一个…
自己的AC做法似乎离正解偏了十万八千里而且复杂了不少--不管怎样还是记录下来吧. 题意: 题目链接: JOISC2017 F - AtCoder JOISC2017 F - LOJ \(N\)个车站排成一行,第\(i\)个车站有一个在\([1,M]\)之间的权值\(l_i\).有\(M\)种列车,第\(i\)种在所有满足\(l_j \geq i\)的车站\(j\)停靠.如果搭乘一种列车从\(u\)到\(v\),需要在\(u\).\(v\)之间的所有停靠站(包含\(u\)和\(v\)),各停车一次…
题目分析: 好像跑得很快,似乎我是第一个启发式合并的. 把玩具看成区间.首先很显然如果有两个玩具的进出时间有$l1<l2<r1<r2$的关系,那么这两个玩具一定在不同的栈中间. 现在假设一定有解,我们怎么得到答案呢?排序会使得计算变得方便,下面我们按照左端点排序. 想象一条扫描线,从左往右,当它遇到了一个区间的左端点的时候,我们尝试着将原先不在一起的合并,所有和这个不同栈的都被合并. 我们可以想象一个并查集,使用堆维护并查集.堆内存储并查集内元素的右端点.在最外面再用一个大堆来存储每个并…
题意 你有两个栈,有 \(n\) 个货物,每个货物有一个进栈时间和出栈时间(所有时间的并集是1~2n),问有多少种不同的入栈方案. \(n\le 10^6\) 分析 把每个货物的存在看成区间,相交的区间不能在同一个栈中.这样就有了 \(O(n^2)\) 连边的方式,再用二分图染色判断一下是否合法即可.合法方案数就是 \(2^{连通块个数}\). 考虑将所有区间按照左端点排序,用一个 set 维护和当前区间相交的区间.由于不能出现三元环所以所有和当前区间相交的区间都是包含关系,这种包含区间之间形成…
Description 小M有两个本质不同的栈. 无聊的小M找来了n个玩具.之后小M把这n个玩具随机顺序加入某一个栈或把他们弹出. 现在小M告诉你每个玩具的入栈和出栈时间,现在她想考考小S,有多少种方案,把每个玩具分配给两个栈之一,并且存在一种满足小M告诉你的入栈和出栈时间的入栈序列. 可怜的小S当然不知道啦,所以他求助于你. Solution 考虑把存在矛盾的玩具连边,设 \(k\) 是最后的连通块数,如果这个图是二分图,那么答案就是 \(2^{k}\) 这样连边是 \(O(n^2)\) 的,…
Description 小S和小M去看花火大会. 一共有 n 个人按顺序排成一排,每个人手上有一个仅能被点燃一次的烟花.最开始时第 K 个人手上的烟花是点燃的. 烟花最多能燃烧 T 时间.每当两个人的位置重叠且其中一个人手上的烟花是点燃的时,另一个人手上的烟花可以被点燃. 现在小M想要知道,每个人至少需要以多快的速度 s 奔跑,才能使得每个人手中的烟花都能被点燃. 可怜的小M当然不会啦,所以她向你求助. Solution 首先二分答案,算出一个人点燃烟花后最多可以走的距离 \(s\) 要猜一个结…
暴力就是O(n^2)连边,二分图,这样只有22分. 我们考虑优化建边,我们按照左端点排序,对于一个新加进来的线段,我们向左端点距其最近的和他相交的线段连边,别的相交的我们连同色边,当一个点连了两条同色边我们就把它删掉,复杂度O(nlogn),边数O(n). #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4388 题解 模拟Prim算法? 原题所述的过程就是Prim算法求最大生成树的过程.于是我们可以知道起始点并没有影响. 那么就用数据结构模拟Prim算法吧. 首先离散化所有区间,每个区间只需要一个点和外面相连,其余点均按照覆盖该点区间的最大权值与这个点相连.因此简单利用线段树即可求出这一部分的答案. 对于剩下的部分,用维护\(T\)表示目前没有加入的点,先加入左边\(1\)号点,同时用大…