正文内容加载中...
posted @ 2019-09-16 13:41 神之右大臣 阅读 (28) 评论 (0) 编辑
正文内容加载中...
posted @ 2019-09-10 20:01 神之右大臣 阅读 (26) 评论 (0) 编辑
该文被密码保护。
posted @ 2020-01-16 14:15 神之右大臣 阅读 (9) 评论 (0) 编辑
摘要:首先,splay是一种通过大力证明可证的严格nlogn的数据结构(由于我现在不会所以现在不证) spaly是一种BST(二叉搜索树),因此它具有BST的所有性质(最主要的就是中序遍历表示节点从小到大); 为了能更好的理解splay,一定要先学BST,否则会不清楚splay的一些由BST得到的性质; 阅读全文
posted @ 2020-01-09 16:29 神之右大臣 阅读 (9) 评论 (0) 编辑
摘要:在说狄利克雷卷积之前,最主要的是学会整除分块,不仅仅是结论,更重要的是推导过程(详见这里:传送门) 整除分块是第一步,第二步是乱七八糟的数论函数; 首先介绍一下数论函数:定义域为正整数,值域为复数的一个子集的函数 对于数论函数(本文以下部分若未特殊说明省略"数论函数")$f(x)$,若对于任意互质的 阅读全文
posted @ 2020-01-07 11:10 神之右大臣 阅读 (21) 评论 (0) 编辑
摘要:题面传送门 这道题我们首先会想到处理中位数的常见方法: 二分枚举答案ans,将大于ans的数变为1,小于的则变成-1;如果这个区间的和大于1,则说明中位数比枚举的答案要大,否则要小; 但是这道题的区间并不确定,难道我们要n*n枚举?肯定不行; 观察性质,我们发现,对于区间[b,c],我们肯定要选择, 阅读全文
posted @ 2019-12-27 17:39 神之右大臣 阅读 (10) 评论 (0) 编辑
摘要:首先,我们可以知道,这个$\sum_{i=1}^{n}x^{m}$的通项公式是一个m+1次的多项式; 下面就对其正确性进行论证; 我们设多项式:$f(x)=\sum_{i=0}^{n}u_{i}x^{i}$ 设对于数列a{ },a[x]=f(x); 假如b{x}=a[x+1]-a[x]; 那么显然: 阅读全文
posted @ 2019-12-27 17:22 神之右大臣 阅读 (38) 评论 (0) 编辑
摘要:首先,要先下载好VScode(最好去官网下载) 然后下载一个编译器,记住该编译器的位置 给出一个我常用的编译器的链接:https://www.lanzous.com/b00t70uxa 密码:61ij (分两部分下载,下载后合并在一个文件夹中) 然后把编译器放在C盘的根目录下; 然后在桌面建立一个文 阅读全文
posted @ 2019-12-26 14:48 神之右大臣 阅读 (22) 评论 (0) 编辑
摘要:题面传送门 我们一句话题意:求两个字符串的公共回文子串的数量; 首先对于每个串构造一个回文自动机,然后由PAM的定义可知:对于PAM上从根节点转移方式相同所到达的点代表的回文串是相同的; 这样对于两个PAM同时dfs,每次dfs到的节点的数值(在其原串中的出现数量)相乘,然后累加到答案里; 注意:要 阅读全文
posted @ 2019-12-26 09:16 神之右大臣 阅读 (12) 评论 (0) 编辑
摘要:(本文中的数学公式或许需要耐心等待才能加载出来) 首先,我们要知道,谁是拉格朗日: 但其实这不重要,重要的是它的插值法; 对于一个点值多项式,我们可以n^3地把它高斯消元得到一组系数解; 但这太慢了; 所以我们需要用到拉格朗日插值; 先看一个公式 $f(x)=\sum_{i=0}^{n}y_{i}\ 阅读全文
posted @ 2019-12-24 13:55 神之右大臣 阅读 (15) 评论 (0) 编辑
摘要:题面 这道题有点坑人啊~ 首先,它需要取模,模数是100000000;(窝在这里死了好久好久,看了别人的代码才发现这一点)然后我发现题解中没有序列自动机的方法,于是就来一发首先,虽然序列自动机在定义上与后缀自动机、回文自动机等听起来比较高大上的算法同属于自动机的范畴,但它仅仅是个**普及-**算法为 阅读全文
posted @ 2019-12-24 11:35 神之右大臣 阅读 (6) 评论 (0) 编辑
摘要:回文自动机也叫做回文树 由名字可知:它是一棵树 树有什么性质? 节点个数为n,一个点只有一条出边(一个父亲); 我们把符合树的性质的回文字典树叫做回文自动机; 由树的性质大致可以推出:回文自动机的时间复杂度是线性的!(废话,不然要你有何用?) 首先,由于回文串的性质,回文自动机的最大的一个特点就是他 阅读全文
posted @ 2019-12-18 20:55 神之右大臣 阅读 (9) 评论 (0) 编辑
摘要:后缀自动机 (suffix automaton, SAM) 是一个能解决许多字符串相关问题的有力的数据结构。(否则我们也不会用它) 举几个例子,以下的字符串问题都可以在线性时间内通过 SAM 解决 1.在另一个字符串中搜索一个字符串的所有出现位置。(诶?KMP好像能做) 2.计算给定的字符串中有多少 阅读全文
posted @ 2019-12-17 19:12 神之右大臣 阅读 (17) 评论 (0) 编辑
摘要:题面 首先,由于本人太菜,不会莫队,所以先采用主席树的做法; 离散化是必须环节,否则动态开点线段数都救不了你; 我们对于每个元素i,插入到1~(i-1)的主席树中,第i颗线段树(权值线段树)对于一个区间[l,r]维护的便是原序列1~i中的所有属于[l,r]的元素出现的最后位置的最小值; 当我们查询[ 阅读全文
posted @ 2019-12-13 20:15 神之右大臣 阅读 (14) 评论 (0) 编辑
摘要:有这样一类问题:一个n个点m条边的有向图中,找到一颗总边权最小的生成树,使得根节点能到达任意一个点(这样的一颗树就叫做这个图的最小树形图); 我们怎么暴力怎么来: 1.首先,我们对于图中的每个点y求出所有出边指向y中边权最小的点x,对于(x,y)建立父子关系;2. 2.然后我们按照这个关系得到一个图 阅读全文
posted @ 2019-12-13 16:10 神之右大臣 阅读 (21) 评论 (0) 编辑
摘要:题面 虚树的模板题: 虚树的思想是只保留有用的点(在这道题目里面显然是标记点和lca),然后重新构建一棵树,从而使节点大大减少,优化复杂度 我们维护一条链(以1号点为根),这条链左边的所有在虚树上的位置都已经处理完毕;而这条链右边的和下面的都未处理; 这条链我们用栈来维护; 对于要新加的询问点now 阅读全文
posted @ 2019-12-12 20:11 神之右大臣 阅读 (11) 评论 (0) 编辑
摘要:题面 我们寻找一个东西总是比判断一个东西复杂,对吧; 那么就转化思路:如果我们知道等差数列的中间项mid,那么就是寻找一对数(l,r),使得abs(mid-l)==abs(mid-r),且l<mid<r; 可以枚举每个数作为中间项,然后O(n)的判断是否存在这样的数对(l,r); 但这是O(n^2) 阅读全文
posted @ 2019-12-12 16:56 神之右大臣 阅读 (19) 评论 (0) 编辑
摘要:题面 这道题我们首先会想到优化建图; 线段树优化建图?不对不对; 那么就具体问题具体分析: 浅显的性质:有可能选择的边一定存在于按x或y排序的相邻的两个点之间; 那么O(n)建图,然后dijkstra就好了; #include <bits/stdc++.h> #define inc(i,a,b) f 阅读全文
posted @ 2019-12-10 19:53 神之右大臣 阅读 (15) 评论 (0) 编辑
摘要:1.Huffman Tree(哈弗曼树) 1.1首先存在定义: 树的带权路径长度:树中所有叶节点的权值乘上其到根的路径长度之和 构造一棵二叉树使其带权路径长度最小,称这样的二叉树为哈夫曼树。也叫最优二叉树 1.2 性质1:哈弗曼树是一颗满二叉树: 证明:如果不是满二叉树,我们就把儿子数为1的节点变为 阅读全文
posted @ 2019-11-10 15:31 神之右大臣 阅读 (21) 评论 (0) 编辑
摘要:题面: 我们知道:相邻房间的犯人的宗教相同的方案数=总方案数-相邻房间的犯人的宗教不相同的方案数; 那么所有方案数是m^n; 我们假设第一个房间有m中取值方案,而对于每个房间(非第一个)都有m-1个取值方案,所以总方案是(m-1)^(n-1)*m; 那么答案就显而易见了; #include <bit 阅读全文
posted @ 2019-11-08 20:44 神之右大臣 阅读 (13) 评论 (1) 编辑
摘要:其实这个东西真的算自动机吗?好像还真的符合自动机的定义啊; 我将在下面用人话来定义序列自动机,并不像某度某科一样不说人话; 设一个字符集S,nxt[i][j]表示第i个位置往后第一个j元素出现的位置; 这个nxt数组可以O(n)的求出来,可以自行验证; for(int i=n-1;i>=0;--i) 阅读全文
posted @ 2019-11-08 20:20 神之右大臣 阅读 (23) 评论 (3) 编辑
摘要:题面: 小a是一名强迫症患者,现在他要给一群带颜色的珠子排成一列,现在有N种颜色,其中第i种颜色的柱子有num(i)个。要求排列中第i种颜色珠子的最后一个珠子,一定要排在第i+1种颜色的最后一个珠子之前。问有多少种排列珠子的方案。 输入格式 第一行一个整数N,表示珠子颜色数量第二行N个整数,分别表示 阅读全文
posted @ 2019-11-07 20:41 神之右大臣 阅读 (10) 评论 (0) 编辑
摘要:题面 总体来说是一道从下往上的DP+贪心; 设f[i]表示将消息传给i,i的子树全部接收到所能消耗的最小时间; 那么对于i的所有亲儿子节点j,我们会贪心地先给f[j]大的人传递,然后次大..... 可以证明,这样的答案一定是最优的; 然后f[i]=max(f[i],f[j]+cnt); 总的时间复杂 阅读全文
posted @ 2019-11-06 20:11 神之右大臣 阅读 (25) 评论 (0) 编辑
摘要:题面 对于每个点,我们可以用一次dfs求出这个点到以这个点为字树的最远距离和次远距离; 然后用换根法再来一遍dfs求出这个点到除这个点子树之外的最远距离; 显然的,每次的询问我们可以用向上的最大值加向下的最大值得到; 具体换根法的实现可以看下面的代码~; #include <bits/stdc++. 阅读全文
posted @ 2019-11-06 17:29 神之右大臣 阅读 (18) 评论 (0) 编辑
摘要:题面 10%的数据,n ≤ 100, k = 0,w = 0。直接输出即可。(就是个完全匹配) 10%的数据,n ≤ 10, k≤ 20, 0 ≤ w ≤ 500。O(n!)枚举。(就是搜索啊~) 10%的数据,n≤ 15,k ≤ 20, 0 ≤ w ≤ 500。状压,fi,j表示处理了左边前i个点 阅读全文
posted @ 2019-11-06 17:15 神之右大臣 阅读 (17) 评论 (0) 编辑
摘要:T1.[LNOI2014]LCA 给出一个n个节点的有根树(编号为0到n-1,根节点为0)。一个点的深度定义为这个节点到根的距离+1。 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先。 有q次询问,每次询问给出l r z,求sigma_{l<=i<=r}dep[LCA(i,z 阅读全文
posted @ 2019-11-05 19:44 神之右大臣 阅读 (14) 评论 (0) 编辑
摘要:题面 这道题明显的一定要找到直径的具体路径,所以两遍dfs是比较好的选择; 第一问是一道弱智题吧? 主要难度全部分摊在了第二问; 其实不难,先找到任意一个直径; 对于任意一个在直径上的点: 设nxt[i]表示这个点的下一个位置,pre[i]表示这个点的上一个位置; ls[i]表示这个点到直径的左端点 阅读全文
posted @ 2019-11-05 16:03 神之右大臣 阅读 (8) 评论 (0) 编辑
摘要:题面 这道题是一道数位DP的模板题; 因为窝太蒟蒻了,所以不会递推,只会记忆化搜索; 首先,咋暴力咋来; 将一个数分解成一个数组,这样以后方便调用; 数位DP的技巧:(用1~b的答案)-(1~a的答案)就是(a~b的答案); 那么对于每个数码i,我们做两次dfs(分别以a为上界和以b为上界); 设正 阅读全文
posted @ 2019-11-04 20:41 神之右大臣 阅读 (11) 评论 (0) 编辑
摘要:先说一句题外话,有谁看到的第一眼看成了某站的知名up主夏日祭?题面夏至祭是一场迎接祖灵于夏季归来同时祈求丰收的庆典。村里的男人会在广场上演出冬之军跟夏之军的战争,夏之军会打倒冬之军的大将冬男,再放火将他连山车一起烧掉。谢尔吉斯村长已经选好了N个人参加演出,其中一些人负责演夏之军,另一些人负责演冬之军 阅读全文
posted @ 2019-11-04 20:16 神之右大臣 阅读 (10) 评论 (0) 编辑
摘要:题面 首先你要知道题问的是什么:使用一种数据结构,动态地维护以1为起点地最长上升子序列(把楼房的高度转化成斜率地序列)的长度; 怎么做?线段树! 我们在线段树上维护两个东西:1.这个区间内斜率的最大值 2.从这段区间开头可以看到的区间内的所有楼房 初始化:对于每一个叶子节点,从这段区间头可以看到的楼 阅读全文
posted @ 2019-11-03 21:06 神之右大臣 阅读 (13) 评论 (0) 编辑
摘要:题面 这道题比较显然地,是一道树形背包; 但是会有环,怎么办呢? 缩点!tarjan缩点! 然后在新图上跑树形背包就可以AC了 #include <bits/stdc++.h> #define inc(i,a,b) for(register int i=a;i<=b;i++) using names 阅读全文
posted @ 2019-11-03 19:58 神之右大臣 阅读 (8) 评论 (0) 编辑
摘要:题面 这道题咋看都是无法从dp入手,那么就从数据结构入手!; 首先你要会权值线段树和线段树合并。 然后你要知道: 对于任意一个节点,交换左右子树对当前节点和前面的所有节点没有影响。 因为这是前序遍历:根节点->左子树->右子树。可以看到,交换左右子树对前面的节点无影响。 我们清楚,交换子树只会对该逆 阅读全文
posted @ 2019-11-01 20:33 神之右大臣 阅读 (10) 评论 (0) 编辑