08 2024 档案

摘要:标记永久化:1:26:00 如果外层线段树为下标线段树会发现没有办法快速维护,这个时候我们就要想到权值线段树:外层采用权值线段树,其每个节点维护一颗下标线段树,表示这个节点所代表的权值在序列中有多少个。如果n=5,值域大小为5,那么权值线段树如下 比如[4,5]这个节点,维护 阅读全文
posted @ 2024-08-31 15:05 最爱丁珰 阅读(9) 评论(0) 推荐(0) 编辑
摘要:看这篇题解即可 阅读全文
posted @ 2024-08-31 09:42 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:树套树就是外层的树的每个节点都是一个树。一般来说外层的树为线段树/树状数组,内层的数为平衡树/线段树 这一道题,如果没有区间的话,不难知道就是一个set;现在有了区间,外面就套一个线段树,线段树的每个节点维护一个set,将询问区间划分成O(logn)个子区间,每个子区间都查询x阅读全文
posted @ 2024-08-31 08:28 最爱丁珰 阅读(10) 评论(0) 推荐(0) 编辑
摘要:都是Splay比较常见的操作,平衡树节点维护是一个量:左右儿子,子树大小,节点代表的值(对于非哨兵来说,值等于输入的c;对于哨兵来说,值等于0),节点代表的副本值(对于非哨兵来说,副本值等于值;对于哨兵来说,副本值等于1001),子树代表的区间从左/右开始的最大和,子树代表 阅读全文
posted @ 2024-08-30 21:28 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:考虑在线维护,显然用并查集。对每一个集合都维护一个Splay(或其他平衡树),然后直接查询就好了;所以现在的任务就是合并两个Splay。如果满足一个Splay的最大值小于另一个Splay的最小值,那么是可以快速合并的;但是这里显然不满足,所以只能用启发式合并,对于较小的Splay,遍历其每个节点,然 阅读全文
posted @ 2024-08-30 10:25 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:比较显然的一个trick就是像“蚯蚓”这道题目一样,用一个变量delta记录整体工资的移动,设平衡树记录的工资为x,则x+delta为真实工资(当然Splay也支持区间修改,但是没必要,这里肯定用这个trick) 于是现在只需要解决问题F。即\(x 阅读全文
posted @ 2024-08-30 08:18 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:涉及了区间翻转操作,Splay不再是BST;Splay只能保证其中序遍历为当前序列;用lazy标记做,具体见OI-wiki,代码见下 #include<bits/stdc++.h> #define ll long long using namespace std; const int N=10001 阅读全文
posted @ 2024-08-29 14:29 最爱丁珰 阅读(18) 评论(0) 推荐(0) 编辑
摘要:具体讲解见OI-wiki(他的左旋右旋跟蓝书的有点不一样,按照蓝书的理解,代码见下),下面是一些补充 拓展: 1.将一个序列插入到x的后面:找到x的后继y,先将x伸展到根,再将y伸展到x的右子树,此时由于yx的后继所以y的左儿 阅读全文
posted @ 2024-08-29 11:12 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:题目求的就是点仙人掌的数量;点仙人掌的所有环缩点之后就变成了一棵树,于是考虑无根树的数量怎么求,很显然利用Prufer序列就好了;然后考虑怎么将Prufer序列移植到点仙人掌上面,此时就要利用扩展Prufer序列 扩展Prufer序列:对于一个点仙人掌来说,先将所有环缩点变成一棵树,然后将所有缩点离 阅读全文
posted @ 2024-08-28 18:45 最爱丁珰 阅读(26) 评论(0) 推荐(0) 编辑
摘要:Prufer序列的转化方法见这篇博客(这篇文章里这道模板题的高精处理方法也看看,注意特判条件,想想为啥充要) 最后剩两个点的原因就是因为Prufer编码的最后一位是唯一确定的,一定是n 这里主要是对这篇博客的一些说明。 首先:为什么Prufer序列与无根树一一对应? 我们要先知道两个引理:出 阅读全文
posted @ 2024-08-28 10:21 最爱丁珰 阅读(17) 评论(0) 推荐(0) 编辑
摘要:树形图的定义:没有环,每个点(除了根节点)的入度都是1,根节点的入度为0 朱刘算法的过程见OI-wiki;当没有环的时候,就满足了树形图的定义,于是可以结束;否则的话就将所有环缩点(注意此时由于每个点的入度都是1,所以不可能存在两个环有公共点和公共边)得到新图G1阅读全文
posted @ 2024-08-26 15:20 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:这道题目是二分图博弈的板子 介绍一下二分图博弈: 设两部的节点分别为x1,x2,...,xny1,y2,...,ym,先手选择了xi这个节点,则先手必胜当且仅当xi是最大匹配的必须点(也就是说少了xi的话最大匹配数会减少) 证明: 任选一个 阅读全文
posted @ 2024-08-25 14:19 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原图转化成补图之后显然为二分图,于是求最大独立集,根据公式不难转化成求二分图匹配必须边,于是上网络流即可 阅读全文
posted @ 2024-08-25 12:40 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要:基本概念补充: 1.网络流可以有环 2.网络流中不存在反向边,即若(u,v)E,则(v,u)E(如果有(v,u)E的话,可以添加一个点w,将(v,u)变成(v,w),(w,u),所以任意一个有反向边的图都可以转化成没有反向边的图);这样的话考虑问 阅读全文
posted @ 2024-08-25 10:09 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:仍然建出圆方树,方点与原点之间的边权与上一道题目一模一样 考虑普通的树怎么求树的直径:利用树形DP;于是尝试在圆方树上用树形DP。 如果根是圆点,那么我们需要求解形如下图的直径 按照我们之前建的边权,像普通的树形DP一样转移就好了 如果根是方点,那么我们需要求解形如下图的直径 于是就转化成了环路运输 阅读全文
posted @ 2024-08-24 22:46 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:不难将题目转换成求原图的最大团,然后补图转化变成求最大独立集;由于一般无向图的最大独立集是NPC,所以考虑二分图;不难发现此时A中只有选0,1,2三种情况(分别是一个都不选,选一个偶数或者一个奇数,选一个偶数和一个奇数),于是枚举这三种情况,再在B中去掉与枚举的点有边的点,对 阅读全文
posted @ 2024-08-24 20:57 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:利用这道题目的结论,可以知道,“对于任意一个元素来说,与其在同一行的数和与其在同一列的数都是不变的”,而我们最终要在主对角线上面有n个黑点,考虑这n个黑点是最开始的哪n个黑点,于是对于一个黑点,将其所在行和列连边,然后对二分图跑最大匹配,最大匹配是完备匹配就说明有解,否则无解 阅读全文
posted @ 2024-08-24 17:06 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:对任意一个路径可重复点覆盖(不一定最小),如果存在一个点p被重复覆盖了,那么就任取经过其的两条路径···upv···和\(···\rightarrow x\rightarrow p\righ 阅读全文
posted @ 2024-08-24 14:50 最爱丁珰 阅读(16) 评论(0) 推荐(0) 编辑
摘要:提醒两个点: 一.KM求的是权值和最大不是最小所以边权要取反 二.最后累加的是w[match[i]][i],不是match[i][match[i]] 阅读全文
posted @ 2024-08-24 13:55 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:这是仙人掌的模板题,仙人掌不能有自环,但是可以有重边。多颗仙人掌组成的图叫做沙漠。将仙人掌的每个环缩成一个点之后,就会形成树 仙人掌转树要利用圆方树: ①.任选一个点为根 ②.此时每个环有且仅有唯一一个点到根的距离最近。然后将环中的点分类,离根节点最近的点叫“头”,剩余的点作为一类。接下来要将环变形 阅读全文
posted @ 2024-08-23 15:55 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要:先考虑没有修改操作,如何求不同的子串数量,这是后缀数组的经典应用。所有子串就是所有后缀的所有前缀。先将所有后缀按照字典序排序,然后求出height数组,从1循环到n,对于排名为i的后缀来说,新增的后缀个数就是len[i]height[i](前者 阅读全文
posted @ 2024-08-23 09:36 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:不难转化到lcp:当r固定的时候,如果height[i]<r那么肯定不可能选择(p,q),其中p<i<q。于是从大到小枚举r(这样子好维护最值),利用并查集合并区间,维护区间的大小以及最大值和最小值就好了(维护最值的原因见这道题目) 阅读全文
posted @ 2024-08-23 08:03 最爱丁珰 阅读(10) 评论(0) 推荐(0) 编辑
摘要:很显然的翻转矩形而不是翻转操作序列 做法:以后的操作序列s都不变 假设走完第一遍停在了x,y,在途中用map<pair<int,int>,int>记录下来经过的点的x2w取模,y2h取模的点的数量 准备走第i遍的时候,用pair(-ix%2 阅读全文
posted @ 2024-08-22 21:56 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:看这篇题解 其实还有an+1,m+1为整个原来矩阵的数的异或和 其实前面是想到了的,但是没有想到对于任意一个元素来说,与其在同一行的数和与其在同一列的数都是不变的;而且还有an+1,m+1的取值,最开始以为有两个,分别是第n+1行和第m+1列的数的异或和, 阅读全文
posted @ 2024-08-22 20:44 最爱丁珰 阅读(9) 评论(0) 推荐(0) 编辑
摘要:首先可以证明任意一种操作方式都可以等价为对原数列进行删除若干不相交的段的操作 比如三步为依次删除{a2,a3},{a5,a6},{a1,a4},现在这种操作删除的数是k的倍数,于是等价于\(\l 阅读全文
posted @ 2024-08-22 20:35 最爱丁珰 阅读(11) 评论(0) 推荐(0) 编辑
摘要:先来讲一下到底什么叫K-SAT 先来看看2-SAT的准确定义 那么对于k-SAT,不是说每个集合就有k个元素了(每个集合仍然只有两个元素,因为布尔变量的取值只有01),而是说给出的限制条件涉及k个元素,比如3-SAT 那么对于这道题目,如果不考虑\(\text{x} 阅读全文
posted @ 2024-08-22 11:35 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:采用“利用已知构造未知”的方法,假设我们现在已经获得了树的一部分,设为A,设B={1,2,3,...,n}A 每一次我们任选aA,bB,令l=a,r=b,询问(a,b),如果得到的答案x属于A,那么令\(l=x\ 阅读全文
posted @ 2024-08-22 08:22 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:如果将新娘也看做一个点,那么就要考虑新娘坐在哪一侧。这里不妨运用一个小技巧,假设两侧分别是0侧和1侧,我们可以强制新娘坐在0侧(利用“卡图难题”这一道题目的技巧),然后再去分类讨论 注意此时对于通奸的人来说,不要将他们分成“两人0侧,一人0侧一人1侧, 阅读全文
posted @ 2024-08-20 20:39 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:补充两个平面图的性质: 一.设原图有C个连通块,则VE+F=C+1 二.对于一个简单(无重边无自环)连通平面图,若V3,则E3V6 证:由于无重边无自环,所以一个面的边界至少有三条边(最外面的无穷面的边界定义为将其与非无穷面分隔开的边),而一条边挨着两 阅读全文
posted @ 2024-08-20 17:02 最爱丁珰 阅读(24) 评论(0) 推荐(0) 编辑
摘要:先介绍计数排序。思考一下桶排序,桶排序是不稳定的。计数排序相当于是稳定的桶排序,时间复杂度为O() 设数组a的值域为[1,n],数组c表示每个元素的数目(也就是桶),数组r[i]表示a[i]的排名(注意这个排名是稳定的,也就是说当有多个\(a[i] 阅读全文
posted @ 2024-08-20 10:38 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:记录一下赛时最后30s做出来的题目,老极限了 看这篇题解 主要是他说的三点提醒的第二点,赛时就是卡了这个 阅读全文
posted @ 2024-08-20 07:28 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:找到了一种比较严谨的证明 将一次连边,看做合并节点,如下,假设连接5,7 新图变成这样: 然后再在新图上继续进行操作,每次删掉的边就是桥的数量 将上述过程缩的点的内部形态仍然看做原树的形态,即 可知上述过程可以用书中的并查集优化(集合的代表元素就是深度最浅的节点) 以后树上路径合并节点就都这 阅读全文
posted @ 2024-08-19 19:33 最爱丁珰 阅读(9) 评论(0) 推荐(0) 编辑
摘要:设f[i][j]表示前i个数被恰好分为j个单调区间的最小花费,有f[i][j]=minp=1i1(f[p][j1]+cost[p+1][i]),其中cost[i][j]表示区间 阅读全文
posted @ 2024-08-19 13:50 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:法一:题面给出了k,2k,3k这些数,容易想到调和级数。于是尝试对于每个k,我们取找出升级的每段(也就是对怪物序列进行划分,每一段的等级相同,相邻两段等级相差一),然后看这篇题解;所以以后遇到处理i=lr[ai>x] 阅读全文
posted @ 2024-08-18 22:31 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:虽然这道题目很简单,但是不知道为啥感觉这方法似乎挺重要所以记一下 首先知道对于任意一种方案,操作顺序无关紧要,且优先操作深度更低的节点一定可以,所以想树形DP 于是看这篇题解 阅读全文
posted @ 2024-08-18 15:41 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:先将题目给出的b转化为单调不降序列。具体来说,对题目给出的原序列a,每个位置都减去其下标得到a;对任意一种构造的b,也都减去其下标得到b,显然\(\overset{n}{\underset{i=1}{\sum}}|a_i-b_i|=\overs 阅读全文
posted @ 2024-08-18 12:54 最爱丁珰 阅读(35) 评论(0) 推荐(0) 编辑
摘要:具体见OI-wiki,但是OI-wiki对左偏树的“外节点”的定义好像错了,其实应该就是指空节点;删除任意一个数的那个部分就不用看了,没啥用 设f(k)表示distk的左偏树最少包含的点,则有f(k)2k1 证明:f(k)单调递增,这是因 阅读全文
posted @ 2024-08-18 11:13 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:具体见OI-wiki,下面是一些补充 重链要求是极大的 每个点都在某一个重链中,如果一个点是重子节点,那么其在与其父亲所连的边的重链中,否则在与其重子节点所连的边的重链中 这一段的原因:我们走重链是不用关心的,因为同一重链的dfs序是连续的,我们可以用其他数据结构维护,我们只用关心这条路径被划分成了 阅读全文
posted @ 2024-08-17 13:51 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:二次离线莫队,顾名思义,就是做了两次莫队。第一次莫队是对题目给的询问进行离线(其实就跟普通的莫队是一样的),第二次莫队是对莫队的询问进行离线,也就是本来普通莫队是O(1)修改的,但是现在不好O(1)修改了,于是尝试对这些修改也进行离散并统一处理 假设我们现在的莫队区间是\([L,R] 阅读全文
posted @ 2024-08-17 09:43 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:树上莫队通过将树转化成DFS序(欧拉序)来解决问题。这道题目跟“HH的项链”很像,考虑树上莫队 首先对树做出一个欧拉序,得到每个点在欧拉序中第一次出现的位置in[x]和第二次出现的位置out[x];如果某个询问的(x,y)的in[x]比in[y]大,那么交换x,y,下面假设in[x] 阅读全文
posted @ 2024-08-17 07:59 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:感觉这个凑的题目都是分类讨论 1.nk×ak,显然先将ak一直取到不能取为止(如果最终方案不是这样,我们可以将方案中的k个面值为1的硬币或者1个面值为k的fancy coin替换为一个面值为k的regular coin 阅读全文
posted @ 2024-08-16 16:52 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:考虑特殊元素,形似()()()和((()))的字符串 如果还想不出来看官方题解 阅读全文
posted @ 2024-08-16 16:38 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题目真的不知道怎么总结了,这技巧太新了 见这篇题解 为什么最开始要引入这个子问题呢?实际上,我们假设我们已经得到了最终的交换后的答案,设为ts就是题目给的原串,从st的最小交换次数当然就是从ts的最小交换次数,于是考虑从ts 阅读全文
posted @ 2024-08-16 16:17 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:明明多简单的一道题,却忘了枚举中转点了 看这篇题解,这种优化建图的技巧是显然的(考试的时候想到了但是没有想到枚举中转点) 阅读全文
posted @ 2024-08-16 15:33 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:对回滚莫队的具体介绍见OI-wiki,主要思想就是由于我们只有add操作比较好O(1)实现,所以我们就让莫队右端点一直增加就好了,并且我们开一个变量记录不好维护的量(用变量记录而不是数组的原因是这样子好备份,具体见打卡代码),然后回滚的时候只更新好维护的量即可 阅读全文
posted @ 2024-08-16 10:47 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:显然当n为偶数的时候比较好考虑,将互相交换的两组放在一起,无论什么情况,这两个组的最大值更小最小值更大是更优的,而且由于(a+b)+(c+d)=(a+c)+(b+d),所以最大值更小当前仅当最小值更大,不会出现最大值更小最小值也更小的情况,所以直接枚举四种情况就好了 然后来考虑当\( 阅读全文
posted @ 2024-08-15 16:32 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:看到c这么小肯定往集合方面去想,但是状压没想出来,此时一定不要忘了SOS DP 于是看这篇题解 S肯定是字符种类的集合,考虑枚举超集,当S的某一个超集以某种方式可以通过给定字符串导出,那么S就不行。考虑S不行的话会怎么样,将S的字符在给定字符串中全部标 阅读全文
posted @ 2024-08-15 15:14 最爱丁珰 阅读(65) 评论(0) 推荐(0) 编辑
摘要:看这篇题解 怎么想到的:比如ai1<ai,那么我们循环到ai1的时候,肯定是先将ai1平方一直平方到一个边界,即再平方一次就超过ai了,然后在这个时候去考察bibi1的性质就好了,猜测两者肯定不会相差太多 阅读全文
posted @ 2024-08-15 14:25 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:考虑暴力怎么做。一个很自然的想法就是枚举每个模式串,并将当前枚举到的模式串作为文本串,然后内层循环再依次枚举模式串,看每个模式串在文本串中出现了多少次 发现上述过程与AC自动机的匹配很像,于是建立AC自动机,将每个串都放在AC自动机上跑query,当前跑到的u就代表这个串的一个前缀,然后让j=u一直 阅读全文
posted @ 2024-08-15 10:50 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:AC自动机上DP的典型题目 假设我们已经获得了最终的串,那么将这个串放在AC自动机上匹配的时候,一定是不会匹配到一个模式串的,我们考虑利用这一点来DP 设f[i][j]表示将经过修改后的文本串的前i个字符放在AC自动机上匹配中途没有匹配到模式串且当前匹配到AC自动机的j号节点 阅读全文
posted @ 2024-08-15 10:07 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:结合我们对AC自动机的理解,我们发现令e[i]表示第i个节点所代表的模式串的编号,query函数中取消e[j] 1就停止循环的条件而是一直循环直到j为0即可;具体见洛谷代码 阅读全文
posted @ 2024-08-15 08:44 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:具体讲解看OI-wiki就好了 构建字典图的那个位置,只用理解路径压缩就好了;在路径压缩完了之后,tr[u][i]表示的是状态u接上一个字符i所表示的字符串能够与Q所匹配的最大后缀长度。形式化地,设s=u+i,令Ps的后缀集合,tr[u][i]=\( 阅读全文
posted @ 2024-08-15 08:42 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:严谨证明其实真的很难 设每次操作为(l,r,x),其中l,r表示操作的左右端点,x表示乘以的值 首先我们知道,最后由于严格升序,所以数列分成三段,第一段为负数,第二段为0,第三段为正数;操作之间的顺序无关紧要;操作之间不会跨段:如果有跨段,那么一定是跨了三段(只跨两段 阅读全文
posted @ 2024-08-14 16:31 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:看这篇题解 考场上肯定考虑到了考虑贡献的,但是没有想到容斥原理,而是一直在尝试如果去计算一定合法的数量。但是容斥原理的技巧在之前的例题也见过,所以千万别忘了这个技巧,复习一下 update 2024.9.16 重新做一遍做出来了 这道题目仍然考虑计数DP的两种做法,设置状态和容斥原理(以及设计子问题 阅读全文
posted @ 2024-08-14 15:06 最爱丁珰 阅读(16) 评论(0) 推荐(0) 编辑
摘要:说明一下时间复杂度,设ans[i][j]表示区间[i,j]的最优决策点 当i=j时,显然ans[i][j]=i 假设当ji=k1时,ans[i][j]随着i,j的增大单调递增,那么当ji=k时,内层循环的次数为\(O(ans[2] 阅读全文
posted @ 2024-08-14 08:52 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:注意类似题目这种建树的方式,建出来可能是树,也可能是堆,而前者不一定是连续的编号,后者一定是连续的编号,这就导致了后者左右子树中一个是完全二叉树,另一个不是完全二叉树(这里就要利用这个性质优化时间复杂度);自己做的时候就是没有抓住这个性质导致没有做出来 显然考虑贡献,设si,j=x,我 阅读全文
posted @ 2024-08-13 22:21 最爱丁珰 阅读(27) 评论(0) 推荐(0) 编辑
摘要:首先找上界是常用技巧了,然后这种循环构造的方法可以记一下 当nm的时候肯定转换为n<m的情况 阅读全文
posted @ 2024-08-13 17:17 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:看官方题解就好了,这题放烟雾弹复习一下 阅读全文
posted @ 2024-08-13 17:04 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:四边形不等式的证明一般都是很难的,所以在考场上一般不要证明,而是把DP的每一步决策打一个表,然后去看有没有单调性 然后这道题目看蓝书就好了,代码见打卡 阅读全文
posted @ 2024-08-13 10:17 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:打表的种类: 1.输入范围很小,此时为全部打表 2.我们的代码可以处理大部分情况,可以对剩余的小部分的情况用打表解决,此时为部分打表 3.预处理的时候,可能TILE/代码太长等,考虑打表替换掉预处理,此时为配合打表 一些打表题: 中文读数字 十三号星期五 这道题目要先理解了插头DP了来,视频看到了1 阅读全文
posted @ 2024-08-13 07:42 最爱丁珰 阅读(15) 评论(0) 推荐(0) 编辑
摘要:不难知道操作的顺序无关紧要,而且操作的边的深度越浅影响的叶子就越多,于是我们考虑从下往上地进行构造 设f[i]表示以i为根的子树的同步时间,g[i]表示达到这个时间的最下操作次数 对于当前节点x,其有若干个儿子v1,v2,...,vk,那么有\(f[x] 阅读全文
posted @ 2024-08-13 07:17 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:赛时用的DP,但是转移有一点点想不清楚 设f[i][0/1]表示前i个字符,以0/1结尾的最小删除数目,g[i][0/1]表示前i个字符,在达到以0/1结尾的最小删除数目的前提下的方案数 然后就会发现此时的g比较难转移,我们必须要将删除字符转换 阅读全文
posted @ 2024-08-12 15:54 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:ABCD中卡的最久的一道题目,而且是先做了D回过来做才灵光一现的。。。 由于每行每列都要有chip,考虑如果某一行/列没有chip会发生什么 加入某一行没有chip,那么我们显然要保证每一列都有chip,而如果每一列都有chip的话,显然是将所有chip都放在最小的行上;对列同理分析 阅读全文
posted @ 2024-08-12 15:38 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:看这篇题解 解释一下,如果存在一个点通向父亲的边和某一条通向儿子的边的颜色相同,那么一开始如果起点就在这个点的话,是没有办法向上走的,所以任意一个点通向父亲的边和某一条通向儿子的边的颜色不同 对于非特殊点,我们只要一直走没有重复出现的那个颜色就好了 如果某一时刻走到了特殊点,此时如果特殊点奇偶性均相 阅读全文
posted @ 2024-08-12 15:29 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:算法的流程看OI-wiki,实现以及统一处理的部分也要看 讲下时间复杂度,显然最外层循环是O(n)的,主要是看内部的那个while循环的次数。如果是i(l,r)的内部,那么只会执行一次,否则的话会执行多次,但是执行多少次r就会增大多少,整个过程r单调不减,最 阅读全文
posted @ 2024-08-12 09:48 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:dsu on tree的板子题目,先从暴力思考怎么做,然后就会发现可以用树上启发式合并了 阅读全文
posted @ 2024-08-12 08:33 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:先考虑暴力怎么做 dfs搜索每个节点,对于当前节点,用迭代遍历其子树并更新答案,在回溯的时候将计数数组清空,时间复杂度为O(n2) 注意到,对于每次准备回溯的时候,设当前根节点为u,其父亲为x,在计算x的时候,如果u是最后一个dfs计算的(注意此时x 阅读全文
posted @ 2024-08-12 08:22 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:非常经典的删数问题,见这篇题解 我赛时的时候考虑的时候删除了ai后,有哪些区间会被删除,哪些区间会被加入 删除的区间:最小值是ai的区间(O(1)计算)、ai作为一个端点但是ai不是最小值的区间(差分维护) 加入的区间:左端点属于(li,i) 阅读全文
posted @ 2024-08-11 16:17 最爱丁珰 阅读(20) 评论(0) 推荐(0) 编辑
摘要:很显然我们每轮都要尽可能多地选择怪物,于是可以猜测进行的轮数不会太多 我们转换一下问题,见官方题解就好 设置了b之后,就转化成了Gem 气垫车这一道题目 看一下官方题解的Another Solution,可以优化成O(n)的算法 阅读全文
posted @ 2024-08-11 16:07 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:证明方法看官方题解就好了,主要是注意这种子问题的证明方法,可以学一下 阅读全文
posted @ 2024-08-11 16:01 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:看这篇题解 主要是复习下将连续的0看做一个0的操作,《离散数学》课有一个技巧也是这样 阅读全文
posted @ 2024-08-11 15:47 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:假设现在有n个元素,每个元素最开始单独成为一个集合 现在有一种合并操作,可以合并两个集合,假设将集合A合并到集合B,那么时间复杂度为O(|A|p),其中O(p)表示合并一个元素的操作的复杂度,也就是说我们的操作每次是合并一个元素和一个集合,所以我们将A 阅读全文
posted @ 2024-08-11 10:49 最爱丁珰 阅读(25) 评论(0) 推荐(0) 编辑
摘要:考虑特殊元素,高度为n的建筑,将其当做分水岭;再对于一种特定的方案划分成若干个集合,以每个被看到的建筑作为集合划分的标准(并且将这个建筑作为集合的代表元素) 比如说,现在建筑群的高度从左到右依次是32541,那么就会划分出两个集合\(\left\{ 3\space 2 \ri 阅读全文
posted @ 2024-08-11 08:50 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:先拓展一个之前讲过的模型的性质 对于一个编号在[0,n)的环(顺时针编号),从编号为x的点开始顺时针跳,每次跳k步,那么最终经过的点一共有nd个(其中d=gcd(n,k)),如果我们将这nd个点按照编号顺序排成一个 阅读全文
posted @ 2024-08-10 13:50 最爱丁珰 阅读(48) 评论(0) 推荐(0) 编辑
摘要:跟上面一道题目基本上一样,异或基加点分治 阅读全文
posted @ 2024-08-09 19:59 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:这道题目看官方解答就好了 考场上确实无法证明,但是最后猜出来了,因为这种一般都是找不变量嘛 其实考场上的时候也想到了将比较大的操作拆分成比较少的操作去进行化简的,但是没有想到怎么拆分 总之来说以后遇到这种题目,无法证明的就去找不变量 阅读全文
posted @ 2024-08-09 16:32 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:转换对象,考虑每个球能被A/B拿到的概率是多少(注意对于每个特殊球/非特殊球来说,能被某一人拿到的概率是相同的) 然后就可以看这篇题解 这篇题解的正确性在于我们不用关注当前拿球的人是谁,对于一整局游戏,无论最后球是按什么顺序拿的,概率都是相等的;这也就是说,每一局游戏的概率与“随机排列n个不 阅读全文
posted @ 2024-08-09 16:12 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:注意到这里m太大了,我们肯定没办法把所有的前m大的数找出来,所以我们只能先尝试把第m大的数找出来 这里的trick跟上一题一样,先将m乘以2,但是这里必须二分第m大的值,设为ans 找到之后我们再统计严格大于ans的值的和以及数量就可以 阅读全文
posted @ 2024-08-09 16:05 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:如果这道题目会可持久化trie的话,是可以用“超级钢琴”这一道题目的思路去做的 如果不行的话,考虑用trie,然后这篇题解关于trie的常用trick的综合可以记住 讲一下怎么查找第k大,不要用二分了,直接把sumr放在trie树上查找。trie树每个点记录一下这个点的子树有多少个 阅读全文
posted @ 2024-08-09 14:07 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:纯板子题,主要是讲一下这题如何快速求ϕ 化简之后要求的是d|nndϕ(nd) 像这个求约数的ϕ可以像下面这么求: 先将n质因数分解,对每个质因数p,求出\(\phi(p),\phi(p^2 阅读全文
posted @ 2024-08-09 10:49 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:赛时想到了二分+trie但是却没有想到怎么维护啊 看到异或,可以想位运算,trie和异或基。跟位运算肯定没啥关系,而异或基是选任意多个数进行异或,trie是两个数进行异或,所以这道题目用trie 二分,考虑是否存在至少k个区间不超过mid check函数:我们枚举区间的右端点\(r\ 阅读全文
posted @ 2024-08-08 16:55 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:置换群通常用来解决一些涉及「本质不同」的计数问题,例如用3种颜色给一个立方体染色,求本质不同的方案数(经过翻转后相同的两种方案视为同一种) 置换:将1,2,3,...,n映射到一个打乱之后的1 ~ n的排列p1,p2,...,pn。可以用一个函数来表示, 阅读全文
posted @ 2024-08-08 10:09 最爱丁珰 阅读(13) 评论(0) 推荐(0) 编辑
摘要:给定一个有穷或者让无穷数列{a0,a1,...},则称g(x)=a0+a1x+a2x2+...(1<x<1)为原数列的一个生成函数 本质就是将问题转换为多项式问题,从而利用多项式的性质去解决问题 一些生成函数的化简见OI-wiki封闭形式 例题:现有\(1g,2,g,3 阅读全文
posted @ 2024-08-08 08:43 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:最开始观察a没看出什么东西来,于是看b,由于统计的是不同的b的数量,所以考虑一个b可以由什么a搞出来,然后就不难发现如果我们将a分段(相同的数放一段),那么对应的b在同一段就会从1开始增加,然后到达一个峰值之后再减小到1(开头和 阅读全文
posted @ 2024-08-07 16:13 最爱丁珰 阅读(17) 评论(0) 推荐(0) 编辑
摘要:设A=\overset{—————————}{a_a_...a_0},B=\overset{—————————}{b_b_...b_0},再设A(x)=ax+ax+...+a0,B(x)=bx+bx+...+b0,则A=A(10),B=B(10) 设$C=AB,C(x 阅读全文
posted @ 2024-08-07 09:57 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:我们发现,如果我们将满足题意的点在数轴上标出,那么我们可以获得若干个连续段。对于一个长度为l的连续段,他对答案的贡献就是l(l+1)2,我们把所有连续段的贡献加起来就得到了答案 于是我们发现这个可以拆分成子问题,具体见这篇题解。sol(nmx,k1)就是 阅读全文
posted @ 2024-08-06 17:06 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:纯弱智我,马上就写出式子来了却没有看出来是拓展贝祖定理 以后这种东西一定要看出来啊 阅读全文
posted @ 2024-08-06 16:48 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:FFT主要用于快速求多项式的乘积。多项式的乘积就叫做卷积 对FG来说,显然暴力算法的复杂度是O(nm),而FFT的时间复杂度为O(nlogn) 多项式的性质:用任意n+1个横坐标不同的点,可以唯一确定一个n次多项式。这个性质叫做多项式的点表示法 证明 阅读全文
posted @ 2024-08-06 09:50 最爱丁珰 阅读(23) 评论(0) 推荐(0) 编辑
摘要:三角剖分思想:将多边形分成一个个三角形从而减少分类讨论的情况 这道题目的主要思路就是将多边形进行三角剖分,于是最终可以只转化为五种情况,具体见视频1:30:00 视频中给出的五种情况的第一种,第三种和第四种比较简单,对于a,b都在外部的,肯定是要讨论ab这条直线与圆的交点个数的情况, 阅读全文
posted @ 2024-08-06 07:54 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:构造题是真的恶心,纯IQ测试,非要这么考直接让大伙去做IQ测试不就好了为啥还要让人学算法呢,做的心烦 考虑A中的每个1,他在B中一定会恰好出现n次,于是可以得到A1的个数,为i=1ncin 此时我们其实已经 阅读全文
posted @ 2024-08-05 16:30 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:看官方题解一就好了 虽然这个看起来跟位运算毫无关系,但是看到了30我们还是往位运算方面想。目前就是要确定x的第i位是否为1,减掉之前已经确定了的数不难搞出来 这是官方题解二,我觉得毫无逻辑,没啥意思 阅读全文
posted @ 2024-08-05 15:05 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:不难发现题目要求构造的树是一颗二叉搜索树,于是考虑在升序排列上构造 考虑谁作为树根,不难发现这个过程很像区间DP,设当前枚举的树根为l,我们只要能够O(1)计算[1,l1][l+1,n]中间的贡献就可以转移了 当然还要消除后效性,于是考虑分配花费。不难想到类似树上 阅读全文
posted @ 2024-08-05 14:22 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:引理一:最小覆盖矩形的所有边上都有点,而且所有边都有凸包上的点,并且这条边上如果有多个点,那么这条边也是凸包的边 引理二:矩形的某一条边与凸包的某一条边共线 证明:反证。如果最小覆盖矩形没有边与凸包的边共线,那么根据引理一,矩形的每条边上有且仅有一个凸包上的点,如下图 四个红色的点是凸包上的点 注意 阅读全文
posted @ 2024-08-05 09:32 最爱丁珰 阅读(14) 评论(0) 推荐(0) 编辑
摘要:其实凸包直径就是平面最远点对,证明见视频5:00 具体过程检OI-wiki(当然视频的证明方法更详细,利用了对踵点的概念),用双指针维护j的原因也可以看视频 注意这里枚举边,不能枚举点,因为凸包上,对于一条固定的边,按某个方向遍历点,则点到边的距离先增后减,而对于某一个固定的点,按某个方向遍 阅读全文
posted @ 2024-08-05 08:13 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:看到了曼哈顿距离,将其转换为切比雪夫距离 转化时,坐标变化的几何意义就是将坐标逆时针旋转四十五度 然后就可以发现同一行的数,如果这个数不是1,那么就可以依次连接,于是我们就化简为了一维 比如样例,考虑的数就是4 5 3 4 5 我考试的时候想到这一步了,但是接下来没想到,因为没有转换考虑对象 阅读全文
posted @ 2024-08-04 16:39 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:这次div.2非常简单,还剩30min的时候就把E做出来了 看官方题解就好了,主要是复习一下离线的情况除了对询问离线,还有可能对序列进行预处理后再依次处理询问(有道题目也是用的这个离线思想,但是具体是哪一道题目忘了) 阅读全文
posted @ 2024-08-04 16:09 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:首先观察样例,不难发现有可能k为奇的时候无解 证明:《离散数学》中有一道题目的trick是|ij|i+j的奇偶性相同,所以曼哈顿排列的奇偶性与p1+1+p2+2+...+pn+n=2(1+2+3+...+n),后者显然为偶数,所以k为奇时无解 其次一 阅读全文
posted @ 2024-08-04 15:55 最爱丁珰 阅读(15) 评论(0) 推荐(0) 编辑
摘要:求三维凸包用增量法求解 假设我们已经维护好了前面的点的凸包,对于新加入的点: 如果这个点在凸包内部显然那就不用管了 如果这个点在凸包外部,那么考虑如下情况: 将新点Pr当做光源,照的到的面全部删掉,照不到的面保留下来即可 如何判断一个面是否能够被照到:取多面体外侧为正方向,则对于某一个面, 阅读全文
posted @ 2024-08-04 09:25 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:纪念一下代码打得太慢了导致比赛结束3分钟才做出来的E题 我的做法: 考虑确定枚举三角形的一个点。最开始尝试枚举x最大的点,但是后面发现不太好讨论,于是尝试枚举x在中间的点,此时发现由于曼哈顿是三角形不可能是钝角三角形,剩下两个点要么同时在中间点的上方,要么同时在中间点的下方 形式化地 阅读全文
posted @ 2024-08-03 21:53 最爱丁珰 阅读(10) 评论(0) 推荐(0) 编辑
摘要:直接看官方题解就好了 考试脑抽了弄不出来(主要是没有把所有不等式加起来,从而导致两边不能同时除以S),后面实在没办法了二分,幸好是SPJ 所以以后遇到这种题实在不行就二分吧 阅读全文
posted @ 2024-08-03 20:52 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:居然自己还是做出来大部分的,还是可以了 首先我们只考虑一个数列如何变化成升序。假设我们从头开始变化,假设有对1 ~ i1来说有aj=j,但是现在aii,于是我们找到i的位置,设为k,我们要想办法将ak=i接在ai1后面 阅读全文
posted @ 2024-08-03 16:33 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:引理:对于平面中一组点集S,若任取一个点o,将S所有点以及S的最小覆盖(椭)圆的所有点绕o按相同方向旋转相同角度,则S以及最小覆盖(椭)圆的边界的并集中任意两点距离不变(可由余弦定理推导),进一步可知相对位置不变,于是最小覆盖(椭)圆也不变(指(椭)圆 阅读全文
posted @ 2024-08-03 09:51 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:性质一:最小圆覆盖是唯一的 证:若存在两个最小圆,如下 显然所有点只能存在于两个圆的交集中,于是以中间那条实心蓝线为直径做一个圆,这个圆显然更小而且能够覆盖所有点 性质二:若我们已经用最小覆盖圆覆盖了所有点,设这些点的点集为S,现在我们新加入一个点p,若p不在S的最小 阅读全文
posted @ 2024-08-03 08:42 最爱丁珰 阅读(83) 评论(0) 推荐(0) 编辑
摘要:从题目给的图片可以得到一个提示,我们将某一个斜坡(不妨假设斜率为正)变成一条直线,那么如果我们瞭望塔建在了这条斜坡的右边,则瞭望塔的顶端一定要在这条直线的上方,否则的话就看不到这个斜坡。进一步地,假设我们已经确定了瞭望塔的位置,那么:在其左边的斜率为负的斜坡都能被看到,斜率为正的斜坡能被看见当且仅当 阅读全文
posted @ 2024-08-02 13:23 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:对于i,存在t>0,使得对于任意ji,有ki+vitkj+vjt 这个时候别去化简了,化简了还没办法做,直接将k+vt看成一条直线,条件就转化成:如果i可以获奖,那么就可以找一条直线x0,使得这条直线上i的对应的方程的值最 阅读全文
posted @ 2024-08-02 11:04 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:基础定义见OI-wiki 注意最后得到的一定是凸多边形;atan2这个函数也可以算π2;“多边形的核”中,“连线”指的是线段;代码见Acwing打卡代码就好了 阅读全文
posted @ 2024-08-02 08:35 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要:看这篇题解即可 解释一下:前面的都跟蓝书一样,直接从结论2开始解释 结论2的意思是说,对于一个已经给定了的b,我们去计算他的最小交换次数,假设我们已经知道了每个数最终要去的位置,就可以建立出G2,而如果这个位置方案满足是最小的交换次数,那么G2的任何一个环 阅读全文
posted @ 2024-08-01 17:01 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:看这篇题解就好了 注意加入一条点到扫描线中的时候,不用执行删边操作,反正加入一个点最多增加两条边,也可以直接跑Kruscal 对很多边的图想办法减少边是一个很重要的trick,一定要记住 update 2024.8.17 想到了减边的操作,甚至想到了:如果考虑一个坐标x,所有经过x阅读全文
posted @ 2024-08-01 15:26 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:看这篇题解就好了 为什么只用考虑质数:看这个帖子 其实VP的时候脑子里蹦出来了质数的,却没有认真想,可惜啊 以后遇到相乘了可以想质数 阅读全文
posted @ 2024-08-01 15:23 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:看这篇题解就好了,思维过程也很清楚 感觉计算几何的题就是这样,不会让你严格证明,靠着样例手玩一下然后盯出来 还要注意我们的旋转模板是顺时针旋转,这里要求逆时针旋转,所以我们的弧度要取负 阅读全文
posted @ 2024-08-01 09:39 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要:凸包,顾名思义,就是凸多边形包围,具体定义见OI-wiki(只是周长最小不一定面积最小,因为有可能有凹多边形,但是是面积最小的凸多边形) 有Graham算法和Andrew算法,后者精度更高常数更小(因为不涉及求角度) Andrew算法: 1.将点排序(横坐标为第一关键字,纵坐标为第二关键字) 2.从 阅读全文
posted @ 2024-08-01 09:04 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示