算法分析
基础的算法实现,如:最短路径,查找,排序,哈希,KMP等等
Galactus_hao
蒟蒻
展开
-
快速幂模板
快速幂求 m^k mod p,时间复杂度 O(logk)。int qmi(int m, int k, int p){ int res = 1 % p, t = m; while (k) { if (k&1) res = res * t % p; t = t * t % p; k >>= 1; } return res;}原创 2021-08-16 21:27:36 · 77 阅读 · 0 评论 -
因数和素数模板
试除法判定质数bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true;}试除法分解质因数void divide(int x){ for (int i = 2; i <= x / i; i ++ ) i原创 2021-08-16 21:26:59 · 74 阅读 · 0 评论 -
并查集模板
并查集模板:#include<bits/stdc++.h>using namespace std;int dsu[10010];int n,m,a,b,op;void init(){ for(int i=0;i<=n;i++){ dsu[i]=i; }}int find(int x){ //查 if(dsu[x]==x){ return x; } return dsu[x]=find(dsu[x]);原创 2021-08-16 21:26:06 · 72 阅读 · 0 评论 -
高精度模板
高精度大写为高精度数,小写为低精度数A+B// C = A + B, A >= 0, B >= 0vector<int> add(vector<int> &A, vector<int> &B){ if (A.size() < B.size()) return add(B, A); vector<int> C; int t = 0; for (int i = 0; i < A.s原创 2021-08-16 21:25:08 · 79 阅读 · 0 评论 -
整数二分查找算法模板
整数二分查找二分模板一共有两个,分别适用于不同情况。算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。版本1当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。C++ 代码模板:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r原创 2021-08-16 21:23:42 · 68 阅读 · 0 评论 -
快速和归并排序模板
快速排序–分治(1)确定分界点:q[l],q[(l+r)/2],q[r]q[l],q[(l+r)/2],q[r]q[l],q[(l+r)/2],q[r],随机(2)调整区间:小于等于x在左边,大于等于x在右边(难点)(3)递归处理左右两段题目链接模板:void quick_sort(int q[],int l,int r){ if(l>=r)return ; int x=q[(l+r)/2],i=l-1,j=r+1; while(i<j){ d原创 2021-08-16 21:21:23 · 92 阅读 · 0 评论 -
DP背包问题及优化详解(全)
背包问题01背包问题原题链接抽象题目:有nnn件物品和一个容量为vvv的背包。第i件物品的体积是v[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。特点:每个物品最多选1次。二维数组实现方式:状态转换方程:dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i])状态转换方程解释:对于第i个物品有两种情况:1.不选第i个物品时:dp[i][j]=dp[i-1][j]2.选择第i个物品时:dp[i][j]=原创 2021-08-10 13:57:40 · 881 阅读 · 0 评论