自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 牛客小白月赛63

牛客小白月赛63E题

2022-12-18 17:37:49 104 1

原创 【最短路算法】

最短路算法朴素版Dijkstra算法堆优化Dijkstra算法Bellman_fordSPFA算法朴素版Dijkstra算法朴素版Dijkstra算法用于解决稠密无负权边图的最短路问题。int n, m; //n(点数) m(变数)int dis[N], g[N][N]; //dis[x](起点1到x的距离) g[a][b](a, b点间的距离)bool v[N]; //标记数组int dijkstra(){ memset(dis, 0x3f, sizeof dis); //初始化所

2022-04-28 21:31:30 201

原创 prime最小生成树算法

1:循环n次2:每次找到距离集合最短的点3:用距离最短的点来更新其他点例题链接例题代码#include <bits/stdc++.h>using namespace std;const int N = 505, INF = 0x3f3f3f3f;int n, m;int g[N][N], dis[N];bool f[N];int prime(){ int res = 0; memset(dis, 0x3f, sizeof di.

2022-04-25 00:02:25 309

原创 16: 区间合并

1:排序,按区间右端点从小到大排序。2:设 st = 第一个右端点, ed = 第一个左端点。3:循环以后处理每一个元素每个元素与{st, ed} 有三种情况{if(a[i].first <= ed && a[i].second > ed) ed = a[i].second.if(a[i] > ed){ans.push_back({st, ed}).st = a[i].first.ed = a[i].second.}}4:输.

2022-02-24 21:58:38 55

原创 15:离散化

排序:sort(lsh.begin(),lsh.end());去重:lsh.erase(unique(lsh.begin(), lsh.end()), lsh.end());1:将原数组进行排序,去重。2:用二分找出原数组中各个数在排序去重后的下标。

2022-02-24 16:32:37 504

原创 14:位运算

常用 1:x的第k位数字是几{1:先把第k位移动到最后一位。x >> k 2:看最后一位数字是几。x & 1}常用2:lowbit(x)返回x的最后一位(最右边)一位 1{lowbit 是树状数组的一个基本操作例 x = 101010 lowbit(x)= 10x = 10100 lowbit(x)= 100实现 :x & - x- x = ~x + 1;x = 10100~x = 01011~x + 1...

2022-02-13 12:28:24 409

原创 13: 双指针算法

双指针算法可以用来优化时间。可以先写一个用暴力的朴素算法看一下i 和 j 有没有什么单调关系有单调关系就可以利用这种单调关系来优化时间模板for(int i = 0, j = 0; i < n; i ++){ while(j< i && check(i, j )) j ++; res = max(res, i - j + 1);}例题链接// 例题代码#include <bits/stdc+...

2022-02-12 20:52:47 577

原创 12:二维差分

原数组p[N][N]前缀和数组s[N][N]二维前缀和公式:s[i][j] = p[i][j] + s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1]差分数组:q[N][N]二维差分公式:将(x1, y1) (x2,y2) 围成的矩阵内的所有数加上 xq[x1][x2] += x; q[x2 + 1][y2 + 1] += x;q[x2 + 1][y1] -= x; q[x1][y2 + 1] -= x;例题链接//例题代码#

2022-01-28 14:46:38 1009

原创 11: 差分

差分是前缀和的逆运算差分数组 p[N]前缀和数组a[N]a[n] = p[1] + p[2] + p[3] + ... + p[n];差分可以用来对数组某一段进行整体加减;对某一区间整体加上 一个数的方法p[l] += x, p[r + 1] -= x;差分数组初始状态为 0;例如 11 12 13 14 15 16l = 2, r = 5;对[l, r] 整体加上5;先 [1, 1] 加11,... ,[6, 6]加上 16;再 对[2, 5] 加上 5;

2022-01-26 14:00:29 589

原创 10:二维前缀和

原数组 s[N][N] 前缀和素组 p[N][N];矩阵前缀和公式:p[i][j] = s[i][j] + p[i - 1][j] + p[i][j - 1] - p[i - 1][j - 1];例题链接#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int n, m, q;int s[N][N], p[N][N];int main(){ scanf("%d %

2022-01-26 12:52:23 313

原创 9:前缀和

原数组 a1, a2, a3, a4, a5, ......, an;前缀和数组 s1, s2, s3, s4, s5, ....., sn;sn = a1 + a2 + a3 + ...... + an;作用 : s[r] - s[l - 1] = a[l] + ... + a[r];例题链接例题代码#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int s[N], ..

2022-01-23 17:10:41 118

原创 8:高精度除法

例题链接模拟除法例如: 135 / 4从第一位开始1 / 4 = 0 ;1 % 4 = 1;(1 * 10 + 3) / 4 = 3 ; (1 * 10 + 3) % 4 = 1;(1 * 10 + 5) / 4 = 3 ; (1 * 10 + 5) % 4 = 3;即 135 / 4 等于33 余3;只需要用代码把上面过程模拟;例题代码#include <bits/stdc++.h>using namespace std;int r

2022-01-22 21:55:42 280

原创 7: 高精度乘法

例题链接例题模板#include <bits/stdc++.h>using namespace std;vector<int> mul(vector<int> a, int b){ vector<int> c; int t = 0; for(int i = 0; i < a.size(); i ++) { t = t + a[i] * b; c.push_b

2022-01-20 15:40:14 398

原创 6:高精度减法

模拟现实减法;例题链接例题模板#include <bits/stdc++.h>using namespace std;bool cmp(string A, string B){ if(A.size() > B.size()) return true; else if(A.size() < B.size()) return false; else if(A.size() == B.size()){ if(A >=

2022-01-18 15:55:23 366

原创 5:高精度加法

string 字符串vector 数组高精度加法模拟现实中的加法注意进位例题链接例题代码1:#include <bits/stdc++.h>using namespace std;vector<int> add(vector<int> &A, vector<int> &B){ vector<int> c; int t = 0; for(int i = 0;

2022-01-18 14:39:41 464

原创 4:浮点数二分

例题链接注意 当 x 为负数时 和 当 x 的绝对值小于 1 时#include <bits/stdc++.h>using namespace std;const double N = 1e-7;int main(){ double x; cin >> x; int flag = 0; if(x < 0){ flag ++; x = abs(x); } double i = ...

2022-01-15 16:44:45 136

原创 3: 整数二分

视频链接二分模板例题链接例题代码:#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int s[N], n, m;int main(){ scanf("%d %d", &n, &m); for(int i = 0; i < n; i ++) scanf("%d", &s[i]); while(m--) { int t; scanf(

2022-01-15 16:40:01 153

原创 2:归并排序

​​​​​​例题链接视频链接归并排序思想1:确定分界点。2:递归划分,将区间不断划分直到区间内只有一个数。3:归并 和二为一。归并排序模板#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int s[N], p[N], n;void merge_sort(int s[], int l, int r){ if(l == r) return ;

2022-01-15 16:26:13 76

原创 1:快速排序

例题链接快排思想1:找中间值 mid。2:把大于mid的数放到mid右边,小于mid的数放到mid左边。3:递归处理左右两边。注意:边界问题。快排模板:#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int s[N], n;void quick_sort(int s[], int l, int r){ if(l == r) return ; i

2022-01-15 15:53:33 266

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除