随笔分类 - C++信息竞赛
学习C++
摘要:反悔贪心 贪心是按照一定顺序进行选择的思想,但是局部最优不等于全局最优,有的时候我们需要用到反悔贪心,看一道例题。 Buy Low Sell High 思路 我们发现不能简单的通过最小的股票或者最大的股票,又或是次大的股票进行操作。 这时,我们考虑一个问题,在 中,利润分
阅读全文
摘要:#include<iostream> using namespace std; const int MAXN = 5 * 1e5 + 5; struct node{ int to,next; }e[MAXN * 2]; int f[MAXN][20],dp[MAXN];//f[x][i] 表示 x
阅读全文
摘要:#include<iostream> #include<algorithm> using namespace std; const int MAXN = 1e5 + 5; int n,m; int lg2[MAXN]; int f[MAXN][50]; int main(){ cin.tie(0)
阅读全文
摘要:位运算 位运算( )是一种直接对二进制位进行操作的运算方式。在 中,位运算符包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。这些运算符在处理二进制数据时非常有用,尤其是在需要高效处理数据或进行底层操
阅读全文
摘要:字典树 字典树是什么? 理论知识 插入操作 我们在插入的时候,先从根节点去向下遍历。对于字符串 的一位 。 如果发现其在字典树中当前节点下有这个字符 ,则继续向下,在向下的过程中每次给当前节点的次数加 ,记录字符串前缀数量。 若无这个字符,则开辟一个
阅读全文
摘要:割点(割边) 前置知识 首先是一些简单的基础。 连通分量:在无向图中其实就是相当于连通块。 序:利用 在树上遍历的过程。 割点:去除这个点后这个图的连通块又增加了。 割边:去除这个边后这个图的连通块又增加了。 实现思路 如果我们在一个连通分量里面对任意一个点做 \(d
阅读全文
摘要: 时间 内容 个人想法 Day1 计算机程序的构造与解释; 递归问题简介 好久没写代码了,第一天找找手感 Day2 贪心算法; 前缀和与差分; 分治算法; 突然发现自己连贪心都不会写了,感觉自己好菜 Day3 DFS & BFS
阅读全文
摘要:字符串Hash 定义 就是类似于 的一种映射关系吧,一个字符串对应一个整数值,通过整数值的异同来判断字符串的异同。那么如何去计算呢? P3370 【模板】字符串哈希 单哈希法 我们可以对于一个字符串$ ( s = s_1, s_2, s_3, \ldots, s_n )
阅读全文
摘要:DP问题 定义 什么是 ,答曰:一种通过将全局问题分解成不同的子问题来进行对复杂问题的计算。 在我看来就是一种递推的 版,依旧是用之前计算过的来推出现在要计算的。 DP板子问题 P1115 最大子段和 思路 我们用 数组来定义到 为止,最大
阅读全文
摘要:最小生成树 定义 什么是最小生成树呢? 好问题,通俗来说就是给你一个图( 个节点),让你选 条边使其保持连通,但是又要保证所选的边的和最小。 P3366 【模板】最小生成树 思路(Kruskal) 我们应该怎么实现呢,不妨将要选的边排个序,从小到大选,诶,好想法,这也是一
阅读全文
摘要:离散化 定义 离散化本质是一种哈希,是一种用来处理数据的方法。 1.创建原数组的副本。 2.将副本中的值从小到大排序。 3.将排序好的副本去重。 4.查找原数组的每一个元素在副本中的位置,位置即为排名,将其作为离散化后的值。 B3694 数列离散化 代码 #include<iostream> #in
阅读全文
摘要:单调栈 定义 单调栈,就是一个栈,不过栈内元素保证单调性。即,栈内元素要么从小到大,要么从大到小。 而单调栈维护的就是一个数前/后第一个大于/小于他的数。 直接看模板题。 P5788 【模板】单调栈 思路 首先 表示的是从 之后第一个大于 的元素的下标。
阅读全文
摘要:最短路问题 单源最短路 全源最短路 Floyd算法 通过转移方程判断 i -> j 的路径中,是否有 i -> k -> j 更短,运用简单 dp 来转移状态。 f[i][j] 表示 i -> j 的最短路径长度。 但不要忘了初始化,一个点到其本身的最短路径为 1,即 f[i][i] = 1,其余的
阅读全文
摘要:图的基本操作 图的存储 1.邻接矩阵 //对于一个正常的边 (u,v,w) vector<int> a[MAXN]; a[u].push_back(v); a[v].push_back(u); 2.链式前向星 //对于一个正常的边 (u,v,w) struct node{ int to,next,l
阅读全文
摘要:深度优先搜索 定义 简单来说就是,一条路走到死,不行的话就回溯,继续一条路走到死,直到抵达目标点。 习题 P2052 [NOI2011] 道路修建 思路 首先,看题目对于花费的定义,道路的长度*道路两端国家数的差值的绝对值,观察一下这个应该怎么计算,我们很明显能想到树子树大小,于是我们只要知道其中一
阅读全文
摘要:贪心问题 定义 顾名思义,越贪越好。。。 习题 P1094 [NOIP2007 普及组] 纪念品分组 思路 简单来说:最少的+最多的,利用双指针。 代码 #include<algorithm> #include<iostream> using namespace std; int w,n; int
阅读全文
摘要:递归问题 定义 简洁来说就是一个函数不断调用自身的一个过程。 习题 汉诺塔问题 思路 对于这个经典的问题,我们考虑了使用递归的做法,由于盘子是在三个底座上来回辗转的,所以我们要确定起始座,辅助座,和目标座。我们专注于最下面的最大的那个盘子,先将盘子都放到辅助座上,等到只剩最大的,将其放到目标座上,再
阅读全文
摘要:背包问题-完全背包 例题 题目描述 此题和原题的不同点: . 每种草药可以无限制地疯狂采摘。 . 药的种类眼花缭乱,采药时间好长好长啊!师傅等得菊花都谢了! 输入格式 输入第一行有两个整数,分别代表总共能够用来采药的时间 和代表山洞里的草药的数目 。 第 \
阅读全文
摘要:背包问题-01背包 首先我们要明白什么是01背包,在下述例题中,由于每个物体只有两种可能的状态(取与不取),对应二进制中的 和 ,这类问题便被称为 。 题目描述 有 件物品和一个容量为 的背包。第 件物
阅读全文