随笔分类 - 算法
摘要:#include <iostream> #define N 100010 #define M 1000010 using namespace std; int main() { int n, m; char P[N], S[M]; int next[N]; next[0] = -1; cin >>
阅读全文
摘要:![](https://img2020.cnblogs.com/blog/1129222/202104/1129222-20210426131511909-1654911162.jpg)
阅读全文
摘要://功能:输入单词,统计单词出现次数并按照单词出现次数从多到少排序 #include <iostream> #include <cstdlib> #include <map> #include <vector> #include <string> #include <algorithm> using
阅读全文
摘要:动态规划 状态 题目问什么,就把什么设置为状态。 状态转移方程 是原始问题的不同规模的子问题的联系,即大问题的最优解如何由小问题的最优解得到,是动态规划的核心。 常见推导技巧:对状态空间进行分类。 例题 1. 单词拆分 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是
阅读全文
摘要:双指针 双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个**相同方向(快慢指针)或者相反方向(对撞指针)**的指针进行扫描,从而达到相应的目的。 换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。 对撞指针 对撞指针是指在有序数组中,将指向最
阅读全文
摘要:1.%运算符 a%b:若a为正数,则该结果必为非负数;若a为负数,则表达式必为非正数。表达式结果与b的符号没有直接关系,及a%b==a%-b。 (a*b)%c=(a%c+b%c)%c (a+b)%c=(a%c+b%c)%c 2.最大公约数 int gcd(int a,int b)//递归 { ret
阅读全文
摘要:拓扑排序 在一个有向无环图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。 思想: 先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。 一直做改操作,直到所有的节点都被分离出来。 如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是
阅读全文
摘要:线段树基本概念 线段树,顾名思义就是由一个一个线段组成的一颗树,每个结点都是一个线段(叶子结点是单元结点),那么每个结点应该包括: 区间左右端点。 区间要维护的信息(视情况而定)。 即每个结点是一个结构体。区间上可以进行区间查询,修改,求和等操作。线段树还是一颗二叉搜索树。其主要用于高效解决连续区间
阅读全文