算法
文章平均质量分 82
zsyzClb
这个作者很懒,什么都没留下…
展开
-
字符串学习笔记(一)——Manacher算法
今天学习了Manacher算法,这是一个可以再线性时间内求解最长回文子串的算法。如果要求最长回文子串,我们很容想到朴素的算法。(一)枚举头尾,判断回文O(N^2)int maxx = 0;for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) { int l = i, r = j; bool bk = 1; ...原创 2020-10-12 12:51:28 · 184 阅读 · 0 评论 -
离线分治算法——CDQ分治详解
以前做过的许多题目,都是在线算法,也就是对与一系列的询问,利用某种数据结构逐个求出答案。而今天学了一种离线算法——CDQ分治,是将全部的询问放在一起,利用分治一同处理。CDQ分治,由2008年国际信息学奥林匹克竞赛(IOI)金牌女选手陈丹琦在国家集训队中引入而得名,为算法竞赛界中的一个广泛称呼。CDQ分治有两种,分别是基于时间的分治和基于值域的整体分治。下面看就开始吧。1.基于时间的分...原创 2020-01-17 16:01:25 · 1622 阅读 · 0 评论 -
点分治详解
今天做了一道点分治的题目,所以就去网上学了一下。相信大家都听说过“分治”吧,分治就是“分而治之”一般是把n分成2份,然后再对每一份进行相同的操作,最后合并起来。而点分治,一般情况下是在一棵树上面进行分治,和普通的分治大同小异。先看一道例题【题意】给定一个有N个点(编号1,2,…,N)的树,每条边都有一个权值(不超过1000)。树上两个节点x与y之间的路径长度就是路径上各条边的权值之和。...原创 2020-01-17 09:30:59 · 386 阅读 · 0 评论 -
高斯消元与线性空间
高斯消元定义:高斯消元其实就是一种能够在线性时间解出N元一次方程组的算法。实现:先将线性方程组转化为一个以每一项系数构成的矩阵,在加上每个方程右侧的常数,可以写成N∗(N+1)N*(N+1)N∗(N+1)的”增广矩阵“。例如:{x1+2x2−x3=−62x1+x2−3x3=−9−x1−x2+2x3=7⇒∣12−1−621−3−9−1−127∣\begin{cases}x_1+2x_2...原创 2019-11-23 15:15:12 · 401 阅读 · 2 评论 -
高次同余方程的Baby Step,Giant Step(BSGS)算法
问题引入给定整数a,b,pa,b,pa,b,p,其中b,pb,pb,p互质,求一个非负整数xxx,使得ax≡b(modp)a^x \equiv b \pmod{p}ax≡b(modp)。因为加了次数,所以扩展欧几里得算法就无法实现了,所以我们要使用**Baby Step,Giant Step(BSGS)**算法Baby Step,Giant Step 算法因为a,pa,pa,p互质,所以可...原创 2019-11-22 20:12:13 · 231 阅读 · 0 评论 -
乘法逆元及其应用(一)
最近学会了乘法逆元,有做了几道题,才发现乘法逆元在有除法又要取模的题目中非常有用。乘法逆元1.定义若整数b,mb,mb,m互质,并且b∣ab|ab∣a,则存在一个整数xxx,使得a/b≡a∗x(modm)a/b \equiv a*x \pmod{m}a/b≡a∗x(modm)。称xxx为bbb的模m乘法逆元,记为b−1(modm)b^{-1}\pmod{m}b−1(modm)。2.证明因...原创 2019-11-22 13:46:47 · 320 阅读 · 0 评论 -
中国剩余定理和扩展中国剩余定理
前言:以前这两个定理我一直都没有搞懂,最近我刷题时遇到了,又去学了一遍,竟然就懂了。。。中国剩余定理设m1,m2,...,mnm_1,m_2,...,mnm1,m2,...,mn是两两互质的整数,m=∏i=1nmim=\begin{matrix} \prod_{i=1}^n m_i \end{matrix}m=∏i=1nmi,Mi=m/miM_i=m/miMi=m/mi,tit_i...原创 2019-11-21 13:33:19 · 224 阅读 · 0 评论 -
动态dp详解
给大家介绍一篇写得很好的博客【题目描述】给定一棵n个点的树,点带点权。有m次操作,每次操作给定x,y,表示修改点x的权值为y。你需要在每次操作之后求出这棵树的最大权独立集的权值大小。1<=n,m<=10^5这一道题,其实就是在没有直接上司的舞会这一题中加上一个修改操作,难度也从一个普通的黄题直接升到黑题如果是像原来那样的暴力,在树退化到链以后会被卡到O(N^2)再想想,...原创 2019-10-24 13:25:42 · 1019 阅读 · 0 评论 -
详解动态树(LCT)
LCT的功能动态树link-cut-tree缩写为LCT支持link(在线建边),cut(在线删边)的操作下面看看这一道题【题意】一个图,有n个点,一开始图中没有边。三种操作:Connect u v:在点u和点v之间建一条边。保证所有Connect操作不会重复建边。Destroy u v:摧毁点u到点v之间的边。保证所有Destroy操作将摧毁的是一条存在的边。Query u ...原创 2019-07-19 10:20:52 · 2302 阅读 · 1 评论 -
斜率优化详解(二)(刷题篇)
上一期刚刚讲完斜率优化的原理,这一期我们就开始做题吧(题目属于caioj)因为我个人比较喜欢图像法,所以这些题目都是用图像法做的(这不是废话吗)【问题描述】有N个工厂,由高到底分布在一座山上。工厂1在山顶,工厂N在山脚。L公司一般把产品直接堆放在露天,以节省费用。突然有一天,被告知三天之后将有一场暴雨,于是公司决定紧急在某些工厂建立一些仓库以免产品被淋坏。对于没有建立仓库的工厂,其...原创 2019-06-25 13:34:20 · 279 阅读 · 0 评论 -
斜率优化详解(一)
花了好长的时间,我终于学会了斜率优化。说实在的,斜率优化其实并不难,但是老师网上的博客写的不够详细,导致我在很长一段时间都无法弄懂。言归正传,我们从一到题讲起【题意】一个包装运输公司,只生产一种容量为L的包装盒。如果要装容量为X的物品,则需要花钱修改包装盒的尺寸,花费为(X - L)^2。现在有N个物品需要装入包装盒,每个物品的容量为Ci。(1)、可以多个物品装入一个包装盒(2)、同...原创 2019-06-19 13:28:05 · 1644 阅读 · 0 评论 -
关于叉积
学过计算几何以后,我发现几乎每一道题都用到了叉积这个东西叉积是什么呢在这个图中(以原点为中心)叉积就是x1*y2-x2*y1( 记得话就记1221,x前y后)但是这并不是完全正确比如说这个图在这个图中,点1和点2是以点0为中心,不是原点因此我们可以把点0当成原点则x1 = p1.x-p0.x;y1 = p1.y-p0.y;x2 = p2.x-p0.x...原创 2019-05-11 10:02:41 · 10940 阅读 · 3 评论 -
P1131 [ZJOI2007]时态同步
题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后,...原创 2019-01-24 16:07:50 · 232 阅读 · 0 评论 -
P4873 [USACO14DEC] Cow Jog_Gold 牛慢跑(金)
题意翻译Farmer John 的 NN 头奶牛 ( 1 ≤ N ≤ 10^5 ) 正在一条长度无限的跑道上慢跑,每头奶牛都有一个不同的开始位置,以及不同的跑步速度。为了方便奶牛们互相超越,整个跑道被分成了若干条赛道。在同一时刻,不可能有在同一条赛道上的两头奶牛占据相同的位置。现在奶牛们要跑 T 分钟,在跑步过程中,他们不会改变自己所在的赛道和自己跑步的速度。FJ想要知道,为了奶牛间不...原创 2018-12-14 13:57:44 · 438 阅读 · 0 评论 -
多重背包模版
下面就是多重背包的原题(借用洛谷的)题目描述终于,破解了千年的难题。小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎。但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物。看来小FF只能含泪舍弃其中的一部分宝物了……小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最...原创 2018-11-28 19:35:06 · 271 阅读 · 0 评论 -
RMQ问题 及st表
rmq问题是多次询问闭区间内的最值,时间复杂度达到O(nlogn+m)st表是一种不支持在线修改算法,专门解决rmq下面是st表的详情 st[i][j]表示在i - ((2^j)-1)这个区间之内的最值st[i][0]就等于a[i],不用说了 既然这样,那么怎么求出st的其他值呢?st表O(nlogn)的预处理其实像极了LCA的初始化因此st[i][j]=min...原创 2018-11-21 21:17:47 · 360 阅读 · 0 评论 -
C++最短路算法
题目描述【题意】给出一个图,起始点是1,结束点是N,边是双向的。求点1到点N的最短距离。哈哈,这就是标准的最短路径问题。 【输入格式】第一行为两个整数N(1≤N≤10000)和M(0≤M≤200000)。N表示图中点的数目,M表示图中边的数目。下来M行,每行三个整数x,y,c表示点x到点y之间存在一条边长度为c。(x≠y,1≤c≤10000)【输出格式】输出一行,一个整数,即为点1到点N的最短距离...原创 2018-06-01 20:56:51 · 3307 阅读 · 0 评论 -
c++强连通算法
一、强连通图强连通图就是在一个有向图中有许多的点,有一些有向边连接这些点,这些点之中任意两个都能相互到达,这就是强连通图二、强连通分量一个有向图中,选出某些点组成一个团体,这个团体中的任意两点都可互相到达。那么:选出来的这些点+这些点之间原有的边=叫做 连通分量三、什么时候使用强连通在有向图的时候才可以用,无向图用并查集就可以解决了那么我们看一下例题(caioj.cn1147)题目描述【题目描述】...原创 2018-06-03 13:52:20 · 1448 阅读 · 0 评论