摘要:
算法详解 KMP 是一种字符串匹配算法,可以在线性的时间复杂度内解决字符串的“模式定位”问题,即: 在字符串 \(A\) 中查找字符串 \(B\) 出现的所有位置。 我们称 \(A\) 为主串,\(B\) 为模式串。下文都用 \(n\) 表示 \(A\) 的长度,\(m\) 表示 \(B\) 的长度 阅读全文
算法详解 KMP 是一种字符串匹配算法,可以在线性的时间复杂度内解决字符串的“模式定位”问题,即: 在字符串 \(A\) 中查找字符串 \(B\) 出现的所有位置。 我们称 \(A\) 为主串,\(B\) 为模式串。下文都用 \(n\) 表示 \(A\) 的长度,\(m\) 表示 \(B\) 的长度 阅读全文
posted @ 2024-08-02 00:01
Sinktank
阅读(188)
评论(2)
推荐(1)
定义 把一个字符串映射到一个整数的函数称作哈希函数,映射到的这个整数就是这个字符串的哈希值。 需要注意的一点是,哈希是将大空间上的东西(字符串有无穷多个)映射到了小空间(一定范围内的整数),所以注定了它一定会存在冲突,即若干个不同的字符串映射到了相同的哈希值,我们将这种冲突称作“哈希碰撞”。也就是说
A - Glutton Takahashi 给定\(n\)道菜,每道菜要么是甜的(用sweet表示),要么是咸的(用salty表示)。必须按顺序吃,如果连续吃到\(2\)个甜的菜,就会浑身难受吃不下去了。请问是否能吃完这些菜。 按题意模拟即可,只要前\(n-1\)个元素中有连续的sweet就输出No
P2672 [NOIP2015 普及组] 推销员 为了便于操作,将住户信息按疲劳值从大到小排序。 那么对于选\(X\)个住户,有\(2\)种情况: 选疲劳值前\(X\)大的住户,答案即为\(\sum\limits_{i=1}^X a[i] + 2\times \max\limits_{i=1}^X
P9755 [CSP-S 2023] 种树 迟来的补题 本题是让最小化所有树长到指定高度日期的最大值,于是想到二分答案。 那么,对于一个给定的期限\(x\),如何判断是否能在这个日期内完成任务呢? 首先我们发现前\(n\)天每天都要种树,那么假设我们已经知道了每个地块最晚哪个日期种树,能保证在期限\
P3187 [HNOI2007] 最小矩形覆盖 调了半天居然是因为没判断浮点精度误差才\(\colorbox{IndianRed}{\texttt{\color{White}{WA}}}\)了\(3\)个点,其他都没有问题!警钟长鸣…… 首先有一个结论:凸多边形的最小外接矩形一定和它的一条边重合。
P4166 [SCOI2007] 最大土地面积 解法\(1\) - \(O(n^2)\) 我们运用调整法,可以证明这个四边形的\(4\)个顶点一定都在凸包的顶点上,具体来说: \(\textbf{Proof:}\) 首先我们知道,凸包内,到某条直线距离最大的点一定包括\(1\)个顶点。 接下来我们考
P7883 平面最近点对(加强加强版) 解题思路 我们用分治的思路来做。 首先将节点按\(x\)坐标从小到大排序,取中间的节点,把点集划分为\(2\)部分。 接下来我们假设左右\(2\)个部分已经求出答案了。 那么目前的答案就是左右答案的最大值。接下来我们只需要处理两区间相交的部分就可以了。 我们已
于 2024/11/25 修改分类 题解 \(\Longrightarrow\) 笔记。 P1452 【模板】旋转卡壳 | [USACO03FALL] Beauty Contest G 旋转卡壳模板题。凸包用的是Andrew算法,就不详述了,具体可以查查资料了解,但提一嘴Andrew算法的一些细节问
POJ3675 Telescope 题意简述 多测。每次给定一个\(N\)边形(保证相邻输入的顶点在多边形上也是邻接的),再给定一个以\((0,0)\)为圆心,半径为\(r\)的圆。 请计算出多边形和圆相交部分的面积(保留\(2\)位小数)。 \(3\le N\le 50\) \(0.1\le r\
POJ2074 Line of Sight 题意简述 多测。给定若干条线段,全部与\(x\)轴平行。 其中有\(2\)条线段表示房子和人行道(虽然翻译不是人行道就是了),保证房子在人行道上面。 其他线段表示障碍物(不保证在房子和人行道之间)。 请找出人行道上最长的连续部分,使得在这中间可以完整地看到
POJ3304 Segment 题意简述 多测,每次给定\(n(n\le 100)\)条线段,请问是否能找到\(1\)条直线,使得所有线段在该直线上的投影有公共部分。 注:两点距离\(<10^{-8}\)被认为是相等的。 思路分析 题意转化一下,就是要我们找一条直线\(l_1\),穿过所有线段。这样
UVA10902 Pick-up Sticks 题意简述 多测。给定坐标系上依次给定\(n\)根木棍的起始和终止坐标,按顺序放置这些木棍,询问最终处在最上层的木棍有哪些。 \(n\le 100000\)。保证任意时刻最上层的木棍不超过\(1000\)个。 思路分析 看起来数据范围很刁钻,不过除了暴力
模板题:P3803 【模板】多项式乘法(FFT) 快速傅里叶变换(Fast Fourier Transform,FFT)在算法竞赛中主要用于求卷积,或者说多项式乘法。如果我们枚举两数的各系数相乘,时间复杂度是\(O(n^2)\),而FFT可以将这一过程优化到\(O(n\log n)\)。 流程 整个
给定一个长度为\(n\)的\(01\)串\(s\),用于表示一个环上的细胞的初始状态,其中第\(1\)个细胞与第\(2\)个、第\(n\)个细胞相邻;第\(n\)个细胞与第\(1\)个和第\(n-1\)个相邻。\(0\)表示细胞死亡,\(1\)表示细胞存活。接下来给定\(t\)轮操作,每一轮操作,根
题意简述 有一个星系,共有\(n*m\)个星球,排成\(n\)行\(m\)列。 初始星球之间没有道路。接下来给定\(P\)种魔法\(1\),\(Q\)种魔法\(2\): 魔法\(1\):第\(i\)种魔法用\(a_i,b_i,c_i\)描述。表示你可以任选星系的一行,在第\(a_i\)和第\(b_i
[题解]P1083 [NOIP2012 提高组] 借教室 解法\(1\):线段树 - \(O((n+m)\log n)\) 比较直观的一种做法,但是可能需要卡一下输入(这里没卡也过了,但要注意输入是\(10^6\)级的,为了保险一定要加)。 #include<bits/stdc++.h> #defi
P2042 [NOI2005] 维护数列 一道思路不难,但实现细节很多的平衡树题,调了一天半终于做出来了w。 对于初始序列,我们可以直接构建一条链(毕竟一个一个调用插入函数也可能形成一条链)。题解有递归直接构建成一棵严格平衡的二叉树的,这样也可以,常数可能会小一点。 其中区间反转就是裸的文艺平衡树(
P3391 【模板】文艺平衡树 给定序列\(1,2,\dots,n\),接下来\(m\)次操作,每次操作给定\(l,r\),你需要翻转\([l,r]\)。 所有操作结束后,请输出这个序列。 我们先从“普通平衡树”这一题出发,思考一下Splay操作的本质。 我们把一个节点Splay到根节点后,中序遍历
前置知识:树的左旋、右旋。 Splay树是一种平衡树。能够做到每个操作均摊\(O(\log N)\)。 前言 与上文AVL树不同之处在于,AVL树在任何操作结束后,都能保证每个节点的左右子树高度相差不超过\(1\)。相应地,每个操作都是严格的\(O(\log N)\)。而Splay树并没有对“平衡”
AVL树是一种严格平衡的二叉搜索树,任何操作结束后,都能保证每个节点的左右子树高度相差不超过\(1\)。 内容源自BV1rt411j7Ff - 【AgOHの数据结构】平衡树专题之叁 树旋转与AVL树。 模板题:P3369 【模板】普通平衡树。 结构体定义 & 基本函数 struct node{ in
AtCoder ~ E - Alphabet Tiles Luogu ~ ABC358E Alphabet Tiles 题意简述 给定正整数 \(K\) 和 \(C_1,C_2,\dots,C_{26}\)。请求出长度在 \(1\) 到 \(K\) 之间,满足下列条件的字符串个数(取模 \(9982
P9432 [NAPC-#1] rStage5 - Hard Conveyors 题意简述 给定一个\(N\)个节点的树形结构,其中有\(k\)个关键节点。 接下来有\(q\)次询问,每次询问给定\(x,y\),请输出\(x\)到\(y\)至少经过一个关键点的最短路径。 解题思路 我们发现,这道题相
P9433 [NAPC-#1] Stage5 - Conveyors 题意简述 给定一个\(N\)个节点的树形结构,每条边有边权,树上有\(k\)个关键点。 接下来有\(q\)次询问,每次询问给定\(x,y\)两点,请计算从\(x\)开始经过这\(k\)个关键点(可以重复经过)再到\(y\)的最短路
P1967 [NOIP2013 提高组] 货车运输 题意简述 给定一个\(N\)个节点,\(M\)条边的无向图,其中每条边有一个边权。 接下来给定\(q\)次询问。每次询问给出\(x,y\),请计算\(x\)到\(y\)路径上最小边权的最大值是多少。 解题思路 我们对于每个连通块跑一遍最大生成树。这
P3398 仓鼠找 sugar 题意简述 给定一个\(N\)个节点的树形结构。接下来有\(q\)次询问,每次询问给定\(4\)个节点\(a,b,c,d\),请计算\(a\)到\(b\)的简单路径和\(c\)到\(d\)的简单路径是否有相交的节点。对于每个询问,输出Y/N表示答案。 解题思路 & Co
P6374 「StOI-1」树上询问 题意简述 给定一个\(N\)个节点的树,接下来有\(q\)次询问。每次询问给定\(a,b,c\),请问存在多少个节点\(i\),使得这棵树在以\(i\)为根的情况下,\(a\)和\(b\)的LCA是\(c\)。 解题思路 & Code 首先通过分析样例,我们发现
UVA11235 Frequent values 没看到多测调了半天 每组数据给定\(n,q\)。接下来给出一个长度为\(n\)的不降序列\(A\)。接下来\(q\)次询问,每次询问给定\(l,r\),求\(A_{l\sim r}\)中出现最多的那个数出现了多少次。 \(1\le n,q \le 1
P4381 [IOI2008] Island 题意:给定一个基环树森林,求每个基环树的直径之和。 我们发现,一棵基环树的直径只有下面两种情况: 环上的某一点作为根的子树的直径。 环上有两点,每个点引出一条链,然后再将这两点相连。 对于第一种情况,我们仅需用树形dp的方法求出每个子树的直径(见OI W
树上背包是树形dp的常见模型,通常是分组背包的变形,而分组背包的本质就是多个泛化物品不断相加。因此掌握泛化物品的合并的方法有助于理解转移的过程(具体见1.4)。 此类问题一般也可以用DFS序、多叉转二叉等方法解决。 引入:二叉苹果树 P2015 二叉苹果树 题意简述:在一个二叉树中,每个边有一个权值
浙公网安备 33010602011771号