随笔分类 -  模板

摘要:线性同余方程 参考: "线性同余方程" 同余方程$ax\equiv b(mod c)$ 定理1: 方程$ax+by=c$与方程$ax\equiv c(mod b)$是等价的,有整数解的充要条件为$gcd(a,b)|c$。 根据定理1,我们可以先利用扩展欧几里得算法求出$ax+by=gcd(a,b)$ 阅读全文
posted @ 2020-01-27 12:40 caoanda 阅读(223) 评论(0) 推荐(0)
摘要:gcd(a,b)和exgcd(a,b,x,y) : 当然也可以使用头文件 __gcd(a,b)` : 证明: 假设有 ①$ax_1+by_1=gcd(a,b)$ ②$a'x_2+b'y_2=gcd(a,b)$ 先假设②是在①的下面,也就是说,在递归顺序中②是先执行完的。 我们由$gcd(a,b)$的 阅读全文
posted @ 2020-01-19 19:43 caoanda 阅读(363) 评论(0) 推荐(0)
摘要:三点共圆 三点: `(x[2].y[2]) x[3].y[3]` 圆心则为 ,半径可以根据两点之间距离公式进行计算 阅读全文
posted @ 2020-01-19 12:00 caoanda 阅读(817) 评论(0) 推荐(0)
摘要:路径还原 例如在求解最短路等等问题时,只需用一个 数组在更新我们要求的数据时,记录一下前驱顶点即可 阅读全文
posted @ 2020-01-18 09:11 caoanda 阅读(318) 评论(0) 推荐(0)
摘要:string的插入和删除 参考: "string插入和删除" 插入(字符串和字符): 删除: 阅读全文
posted @ 2020-01-18 08:44 caoanda 阅读(877) 评论(0) 推荐(0)
摘要:string中find()和substr()的用法 查找从指定位置开始的 当找不到的时候,函数会返回一个 找第一个目标字符串的位置和最后一个的位置(不是全匹配): 在使用 函数的时候一定要注意里面的参数,第一个是起点,第二个是长度! 阅读全文
posted @ 2020-01-17 19:45 caoanda 阅读(638) 评论(0) 推荐(0)
摘要:Bellman Ford BF算法求的是单源最短路问题,即每一个点到起点 的最短距离。 算法的思想在于$d[i]=min(d[i],d[j]+e(j,i))$ 表示点 到`s d[i]`不断进行更新,知道不能更新为止,复杂度为$O(nm)$ 代码: 如果不存在负圈则 的循环是有限的,最多只执行 次, 阅读全文
posted @ 2020-01-17 10:16 caoanda 阅读(138) 评论(0) 推荐(0)
摘要:next_permutation(begin,end) 当排列还存在下一种(以字典序排列)排法时,返回 ,否则返回 返回 的同时,把数组变成字典序中的下一种排法。 测试代码: 输出: 阅读全文
posted @ 2020-01-15 15:44 caoanda 阅读(207) 评论(0) 推荐(0)
摘要:并查集(防退化) 防退化的关键操作在于,记录每一个点的高度,合并的时候,将高度较小的点并到高度较大的点上去。 同时还有一个优化技巧就是路径压缩,它会改变树的高度,但是为了方便起见,也不修改 high 的值 合并操作: 阅读全文
posted @ 2020-01-15 14:54 caoanda 阅读(155) 评论(0) 推荐(0)
摘要:取整 共包括三个函数,都在``头文件下 向下取整 向上取整 四舍五入 这些函数很显然只对小数有用,而当要运算两个整型数之间的除法时,要乘一个 1.0,以此来进行浮点数运算。 阅读全文
posted @ 2020-01-15 11:51 caoanda 阅读(543) 评论(0) 推荐(0)
摘要:背包问题 当范围很小的背包问题是很容易解决的,而当范围很大$(例如:1\le n\le 100,1\le w_i\le10^7,1\le v_i\le 100,1\le W\le 10^9)$时,就应该换一种 dp 的表示方式,这样才能够降低其复杂度。 $dp[i+1][j]$表示前 i 个物品中挑 阅读全文
posted @ 2020-01-14 19:38 caoanda 阅读(150) 评论(0) 推荐(0)
摘要:完全背包问题 $\begin{cases}dp[0][j]=0\\dp[i+1][j]=max(dp[i][j k w[i]]+k v[i]) \end{cases}$ 代码: cpp for(int i=0;i 同时出于节省内存的考虑,可以将其用一维数组表示 cpp for(int i=0;i=w 阅读全文
posted @ 2020-01-14 19:14 caoanda 阅读(154) 评论(0) 推荐(0)
摘要:最长公共子序列 注:子序列是可以不连续的。 递推公式: $dp[i+1][j+1]=\begin{cases}dp[i][j]+1&(s_{i+1}=t_{j+1})\\max(dp[i][j+1],dp[i+1][j])&(其 他)\end{cases}$ 代码: 阅读全文
posted @ 2020-01-14 18:19 caoanda 阅读(90) 评论(0) 推荐(0)
摘要:三分 亲测wa了无数遍得到的板子.... 模板: 阅读全文
posted @ 2020-01-13 14:11 caoanda 阅读(160) 评论(0) 推荐(0)
摘要:前缀和 一维: 构建前缀数组: 应用场景: ①求 $a[1]~a[i]$的累加和 ②求$a "i]~a[j" $的累加和 二维: 构建前缀数组: 应用场景: 求$(x_1 阅读全文
posted @ 2020-01-12 14:43 caoanda 阅读(206) 评论(0) 推荐(0)
摘要:差分 一维: 原数组:$c[i]$ 差分数组$a[i]$:表示$i{\sim}n$的数,每一个数$c[j](i ①把从第$k~n$位的数都加上一个$w$ ②把从第$i$位到第$j$位的数都加上一个$w$ 前提是需要对数组,进行多次①②这样的操作,使用差分才有意义,不然直接暴力就可以了 要注意的是①② 阅读全文
posted @ 2020-01-12 14:11 caoanda 阅读(246) 评论(0) 推荐(0)
摘要:树状数组 可以利用多个树状数组来实现数组的区间更新,参考:[A Simple Problem with Integers](https://www.cnblogs.com/CADCADCAD/p/12287090.html) 阅读全文
posted @ 2019-12-03 20:19 caoanda 阅读(179) 评论(0) 推荐(0)
摘要:"常用数学符号的 LaTeX 表示方法" 阅读全文
posted @ 2019-09-08 14:20 caoanda 阅读(212) 评论(0) 推荐(0)
摘要:关于 和`upper_bound()`: 参考: "关于lower_bound( )和upper_bound( )的常见用法" 注意:查找的数组必须要是排好序的。因为,它们查找的方式也是二分查找,所以,复杂度为 ①从小到大排序 :从数组的 位置到 位置二分查找 第一个大于或等于 的数字,找到并返回该 阅读全文
posted @ 2019-08-26 14:15 caoanda 阅读(207) 评论(0) 推荐(0)
摘要:Dijkstra 思路:每一次枚举当前没有枚举过的 值最小的点 ,然后对该结点进行标记,然后再分别遍历 的每一条边,用 去更新 , ,`w[x][y]`表示 x 与 y 之间的边的权重,具体 Dijkstra 的结构实际上是跟 bfs 差不多的,可以利用一个优先队列来对 Dijkstra 进行优化。 阅读全文
posted @ 2019-08-20 11:53 caoanda 阅读(188) 评论(0) 推荐(0)