
算法模板
一些常用算法的模板
初见。。
这个作者很懒,什么都没留下…
展开
-
acwing---798---差分矩阵(前缀和与差分)
798---差分矩阵题目思路题解题目思路板子题,二维差分公式题解#include <iostream>using namespace std;const int N=1010;int n,m,q;int a[N][N],b[N][N];void insert(int x1,int y1,int x2,int y2,int c){ b[x1][y1]+=c; b[x2+1][y2+1]+=c; b[x2+1][y1]-=c; b[x1原创 2021-09-25 15:35:54 · 164 阅读 · 0 评论 -
acwing---797---差分(前缀和与差分)
797---差分题目思路题解题目思路板子题,一维差分公式题解#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N=1e5+10;int n,m;int a[N],b[N];void insert(int l,int r,int c){ b[l]+=c; b[r+1]-=c;}int main()原创 2021-09-24 17:57:52 · 106 阅读 · 0 评论 -
acwing---796---子矩阵的和(前缀和与差分)
796---子矩阵的和题目思路题解题目思路板子题,二维前缀和公式题解#include <iostream>using namespace std;const int N=1010;int n,m,q;int s[N][N];int main(){ scanf("%d %d %d",&n,&m,&q); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++原创 2021-09-24 17:49:08 · 155 阅读 · 0 评论 -
acwing---795---前缀和(前缀和与差分)
795---前缀和题目思路题解题目思路板子题,一维前缀和公式题解#include <iostream>using namespace std;const int N=1e5+10;int n,m;int a[N],s[N];int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;原创 2021-09-24 17:28:01 · 192 阅读 · 0 评论 -
acwing---794---高精度除法(高精度)
794---高精度除法题目思路题解题目思路板子题,大数除法,主要是大数除以一个较小的数,就是普通的除法运算,搞清逻辑顺序就行。题解#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int> div(vector<int> &A,int b,int &r){ vector<int&原创 2021-09-24 17:16:03 · 151 阅读 · 0 评论 -
acwing---793---高精度乘法(高精度)
793---高精度乘法题目思路题解题目思路板子题,大数乘法,主要是大数乘以一个较小的数,就是普通的乘法运算,搞清逻辑顺序就行。题解#include <iostream>#include <vector>using namespace std;vector<int> mul(vector<int> &A,int b){ vector<int> C; int t=0; for(int i=0;i&原创 2021-09-24 17:00:19 · 208 阅读 · 0 评论 -
acwing---792---高精度减法(高精度)
792---高精度减法题目思路题解题目思路板子题,大数减法主要是在函数中需要判断哪个数大,可能需要换位置加“-”,然后与大数加法不同的是,减法有借位,处理好借位就可以了,最后一定要去除前导0。题解#include <iostream>#include <vector>using namespace std;bool cmp(vector<int> &A,vector<int> &B){ if(A.size()!=原创 2021-09-24 13:17:38 · 139 阅读 · 0 评论 -
acwing---791---高精度加法(高精度)
791---高精度加法题目思路题解题目思路板子题,大数加法就是将数字的位数分开,存到数组之中进行加法操作。题解不压位#include <iostream>#include <vector>using namespace std;vector<int> add(vector<int> &A,vector<int> &B){ if(A.size()<B.size()) return add(B原创 2021-09-24 13:01:54 · 195 阅读 · 0 评论 -
acwing---790---数的三次方根(浮点数二分)
790---数的三次方根题目思路题解题目思路板子题,这道题目是浮点数二分,只要讨论好边界情况就行,通用模板bool check(double x) {/* ... */} // 检查x是否满足某种性质double bsearch_3(double l, double r){ const double eps = 1e-6; // eps 表示精度,取决于题目对精度的要求 while (r - l > eps) { double mid =原创 2021-09-24 09:08:27 · 109 阅读 · 0 评论 -
acwing---789---数的范围(整数二分)
789---数的范围题目思路题解题目思路板子题,这道题目是二分,二分有两种形式,分别是找到符合性质的两个边界,主要是要确定好边界条件防止出错,通用模板bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l,int r){ while (l<r) { int mid=l+r>>1;原创 2021-09-24 09:00:25 · 128 阅读 · 0 评论 -
acwing---788---逆序对的数量(归并排序)
788---逆序对的数量题目思路题解题目思路板子题,这道题是归并排序,统计逆序对的时候,首先要想,归并中左右两边的逆序对先相加,然后对于前面的序列中,若有大于后面序列的数,则前面的序列中的后面所有数都会大于它,所以就加上mid-i+1,最后递归统计就行了。题解#include <iostream>using namespace std;typedef long long ll;const int N=1e5+10;int q[N],tmp[N];ll merge_sor原创 2021-09-24 08:44:23 · 167 阅读 · 0 评论 -
acwing---787---归并排序(归并排序)
787---归并排序题目思路题解题目思路板子题,这道题是归并排序,归并排序就是递归排序,先排左边,再排右边,最后合并,合并的时候新建一个数组,两个指针指向左右两个起点,然后比大小插入新数组就行了。题解#include <iostream>using namespace std;const int N=1e5+10;int q[N],tmp[N];void merge_sort(int q[],int l,int r){ if(l>=r) return;原创 2021-09-23 21:59:40 · 99 阅读 · 0 评论 -
acwing---786---第k个数(快速排序)(快速选择)
786---第k个数题目思路题解题目思路板子题,这道题是快速选择,其实就是在快速排序中判断一下,当小于基准数的数量已经小于要求的次序时,则所求数在后半段,否则就在前面,在后面时,要注意次序的更新,最后递归求解就行了。题解#include <iostream>using namespace std;const int N=1e5+10;int q[N];int quick_sort(int q[],int l,int r,int k){ if(l>=r) r原创 2021-09-23 21:22:34 · 276 阅读 · 0 评论 -
acwing---785---快速排序(快速排序)
785---快速排序题目思路题解题目思路板子题,快排主要就是选定一个数,然后左边的数都要小于它,右边的数都要大于它,最后递归完成就可以了。题解#include <iostream>using namespace std;const int N=1e5+10;int q[N];void quick_sort(int q[],int l,int r){ if(l>=r) return; int i=l-1,j=r+1,x=q[l+r>>1]原创 2021-09-23 21:03:17 · 208 阅读 · 0 评论