![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
zxdxz
xdu-预备役程序员。
展开
-
数位DP
记录今天在Acwing学习的几道数位Dp题目,整理了思路,方便以后的复习:1.度的数量题目描述求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。例如,设 X=15,Y=20,K=2,B=2,则有且仅有下列三个数满足题意:17=24+2017=2^4+2^017=24+2018=24+2118=2^4+2^118=24+2120=24+2220=2^4+2^220=24+22样例输入15 2022输出3数位DPK个互不原创 2020-11-09 18:56:56 · 164 阅读 · 0 评论 -
DP-LIS
写在前面:学DP掌握基础很重要,这里记录一下LIS和LCS,(希望每次在记录时能够收获新的东西引入问题:给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。N有这两个数据范围:1.1≤N≤10001≤N≤10001≤N≤10002.1≤N≤1000001≤N≤1000001≤N≤100000样例:Input:73 1 2 1 8 5 6output:4一.1≤N≤1000对序列中一个的数a[i]来说,我们定义dp[ i ] 表示以a[i]这个数结尾的最长上升子序列的原创 2020-11-09 18:51:42 · 142 阅读 · 0 评论 -
树状数组
复习一下树状数组树状数组一种用于处理单点修改和区间查询的数据结构。树状数组C的定义: C[x] = Sum a[x-lowbit(x)+1,x], 即数组C表示原数组某一区间段的和。lowbit操作int lowbit(int x){ return x&-x;}单点修改 O(logN)对于树形结构,我们如果修改一个点的话,对于他祖宗节点的影响是单一的,即我们可以通过一层一层向上更新包含这个节点的所有C数组的值。int update(int u,int x){原创 2020-11-09 18:48:33 · 83 阅读 · 0 评论 -
并查集
并查集对于某些集合问题,涉及到大量查询操作(查询两个元素是否属于同一集合或是查询某一个元素的祖宗节点),如果使用一般的数据结构,时间和空间开销都比较大,而并查集则可以高效地解决这一类问题。并查集是一种树状数据结构,用来解决集合间的合并以及元素的查询问题,每个集合可以理解为一棵树,不同的集合构成一个森林。我们来看并查集的一个简单的应用:1.Acwing836.合并集合一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:1.“M a b”,将编号为a和b的原创 2020-11-08 16:56:18 · 135 阅读 · 0 评论 -
差分约束
差分约束(1)求不等式组的可行解原点需要满足的条件:从原点出发,一定可以走到所有的边。(这一点必须要满足,否则会遗漏某些不等式)步骤:先将每个不等式Xi <= Xj + Ck,转化成一条从Xj走到Xi,长度为Ck的一条边。找一个超级原点,保证这个原点一定可以遍历所有边。从原点求一遍单源最短路:1 .如果存在负环,则原不等式组一定无解。2 .如果不存在负环,则dist[i]就是原不等式组的一个可行解。根据不等号的方向,建图时注意方向。(2)如何求最大值或者最小值(这里的最值原创 2020-11-08 16:55:43 · 431 阅读 · 0 评论 -
求逆元
逆元的定义若整数b,m互质,并且b|a,则存在一个整数x,使得a/b≡a∗x(mod m),则称x为b的模m乘法逆元,记为b−1(mod m)。b存在乘法逆元的充要条件是b与模数m互质。否则,b不存在乘法逆元。当模数m为质数时,b^(m−2)即为b的乘法逆元。题目示例:Acwing876.快速幂求逆元https://www.acwing.com/problem/content/878/代码://求逆元模板#include <iostream>#include <algori原创 2020-11-08 16:55:15 · 93 阅读 · 0 评论 -
简单贪心
贪心算法是指,在对问题求解中,对问题的每一步决策都采取当前意义下最优策略的算法,即问题的整体最优性可以由局部最优性来导出。贪心算法的正确性需要证明,常见的手段有:微扰(邻项交换),反证法,数学归纳法,范围缩放,决策包容性我们来看几道基础的贪心题:1.Acwing913排队打水 、 洛谷P1223排队接水(两题题意一致,仅输入输出要求不同)有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?输入格式第一行包含原创 2020-11-08 16:54:35 · 168 阅读 · 0 评论 -
欧拉回路
欧拉通路与欧拉回路欧拉通路: 对于图G来说,如果存在一条通路包含G中所有的边,则该通路成为欧拉通路,也称欧拉路径。欧拉回路: 如果欧拉路径是一条回路,那么称其为欧拉回路。欧拉图 : 含有欧拉回路的图是欧拉图。对有无向图G和有向图H:图G存在欧拉路径与欧拉回路的充要条件分别是:欧拉路径: 图中所有奇度点的数量为0或2。欧拉回路: 图中所有点的度数都是偶数。图H存在欧拉路径和欧拉回路的充要条件分别是:欧拉路径: 所有点的入度等于出度 或者 存在一点出度比入度大1(起点),一点入度比出度大1(原创 2020-11-08 16:54:03 · 1367 阅读 · 0 评论 -
Manacher算法
看这样一道例题:hdoj-3068.最长回文给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等Input:输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z组成的字符串S两组case之间由空行隔开(该空行不用处理)字符串长度len <= 110000Output:每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.Sample原创 2020-11-08 16:52:12 · 82 阅读 · 0 评论 -
AC自动机学习笔记
先简单复习一下学习AC自动机所需要的前缀知识。#前缀知识 1-Trie树字典树,也称Trie树,前缀树,主要用于存储大量的字符串以及查询操作。对于Trie树,一般有两个操作:1.insert操作,在Trie树中存储一个字符串2.query操作,在Trie树中查询一个字符串举个例子,对于这样几个字符串,{abcde,abcgf,hello,her}我们看他们在Trie树中是如何存储的:这里需要注意,字符是边,而不是节点,但都是一一对应的代码int son[N][26],cnt[N],i原创 2020-11-08 16:51:22 · 248 阅读 · 0 评论