自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ | unique_ptr

release()返回unique_ptr当前保存的指针并将其置空。因此,p2被初始化为p1原来保存的指针,而p1被置空。reset()令unique_ptr重新指向给定的指针。如果unique_ptr不为空,它原来的对象被释放。因此p2调用reset()释放了用p1初始化的对象,将p3的控制权转移给p2。

2023-11-30 23:13:50 645

原创 C++ | 智能指针和异常

智能指针在管理动态内存时使用delete来释放资源,当使用智能指针管理非动态内存(如 myclass a)时,我们需要定义删除器函数来代替delete完成对只能指针进行释放操作。

2023-11-30 22:33:37 394

原创 Qt | 将窗口透明化样式表

将窗口透明化的样式表:background: transparent;border:0px

2023-11-29 21:26:45 381

原创 C++ | shared_ptr

shared_ptr允许多个指针指向同一个对象,shared_ptr的引用计数为指向该对象shared_ptr的数量,当引用计数为0时自动释放该对象。

2023-11-29 21:18:11 507

原创 C++ | 理解复杂的数组声明

对于简单的数组声明int *A[10];我们可以用从右向左的读法,即从[10]可以知道声明的是一个有10个元素的数组,再向左看知道数组名叫A,再向左,看到操作符*,知道数组中存放的是指针,再向左看到int,知道数组中存放指针是指向int。

2023-11-25 23:43:49 427

原创 C++ | 引用和指针

用从右向左阅读的方法,int *const pA 中pA的左边是const,则表示pA是一个常量对象,声明符中的下一个符号是*,则表示pA是一个常量指针。最后,声明语句的基本数据类型部分确定了常量指针指向的是一个int对象。

2023-11-25 21:55:46 488

原创 Qt | 自定义数据类型与QVariant相互转换

将QVariant转为自定义数据类型。被转换的自定义数据类型声明如下,

2023-11-23 00:58:56 432

原创 Unity | PolyBrush

Polybrush 可让你直接在 Unity 编辑器中混合纹理和颜色、雕刻网格和分散对象。通过阅读这篇文章你可以初步掌握Polybrush的使用方法。

2023-11-19 23:31:07 208

原创 【图解Treap——平衡树】

Treap-平衡树的讲解纯个人理解

2022-06-03 14:35:58 524

原创 J. Joy of Handcraft——线段树

题意:给定n个灯泡,那个灯泡排列在电路板上,然后每个灯泡给定你一个t和x,这个灯泡会在[2kt + 1,2kt + t],k=(0,1,2…)的时间区间内发出亮度为x的光,其他时间内不发光,然后给定你一个m问你:从第一秒到第m秒每一秒时亮度最大的灯的亮度为多少思路:按亮度对时间排序,枚举发光区间,线段树修改,枚举完所有区间后单点查询#include<iostream>#include<algorithm>#include<cstring>#define

2022-01-16 00:04:27 149

原创 C语言或C++求组合数的四种方法

组合数公式递推求组合数应用场景:数据范围小,且有取模条件// c[a][b] 表示从a中选b个的方案数for (int i = 0; i < N; i ++ ) for (int j = 0; j <= i; j ++ ) if (!j) c[i][j] = 1; else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;预处理阶乘求逆元求组合数应用场景有取模条件,..

2022-01-09 09:44:15 10078

原创 卡特兰数——网格

原题链接卡特兰数公式变形一下用分解质因数求组合数解#include<iostream>#include<cmath>#include<vector>using namespace std;typedef long long LL;const int N = 25050;int primes[N], cnt;int sum[N];bool st[N];int x, y;void get_primes(int n)//线性筛{

2022-01-09 09:33:01 420

原创 [洛谷]Problem: P4316 绿豆蛙的归宿

topsort时顺便把路径长度期望算一下就行#include<iostream>#include<vector>#include<queue>using namespace std;typedef pair<int, int> PII;const int N = 1e5 + 7;vector<PII> v[N];//int h[N], w[N], e[N], ne[N], idx;int n, m;int doin[N]

2022-01-06 23:50:08 405

原创 高斯消元

高斯消元模板#include <iostream>using namespace std;const int N = 200;int n;double ans[N], a[N][N];//打印行列式void Print(){ for (int i = 0; i < n; i++) {for (int j = 0;j < n + 1; j++) cout << a[i][j] << " "; cout << end

2022-01-05 23:47:32 266

原创 中国剩余定理

中国剩余定理用于求解同余方程公式 其中为 模 下的逆元例题:生物节律 阿九大战朱最学//阿九大战朱最学#include<iostream>using namespace std;typedef long long LL;//扩展欧几里得求逆元LL exgcd(LL a, LL b, int &x, int &y){ if (!b){x = 1, y = 0; return a;} LL d = exgcd(b, a % b.

2022-01-05 23:45:16 339

原创 A. Busiest Computing Nodes

题意:K个计算点(0 ~ k - 1),N个任务,假设从0 开始编号,第 i 个任务从第 i % k 个计算点开始往后找,如果有计算点空闲,该任务就交给它,否则跳过该任务。你需要找到接受任务最多的点,相同则按升序输出。思路:题目会给你每个任务的开始时间和完成耗时,用线段树维护区间中完成时的时间最小的点,只要在合法的区间内找到完成时间 <= 当前任务开始时间的点,那么当前任务就可以在改点计算。开始时间:a ,完成耗时:b , 完成时间:a + b计算点可接任务条件:当前时间...

2021-09-22 17:51:21 190

原创 P1288 取数游戏II(洛谷)

nim游戏板子:异或起点能到的所有点的边。踩过的坑:异或的值不是边的值,而是如果这个边可以走到就异或1.其实不用异或也可以,只要判断起点能到的边的奇偶性#include<iostream>using namespace std;const int N = 50;int n;int a[N];int main(){ cin >> n; for (int i = 0; i < n; i++)cin >> a[i]; i...

2021-08-16 23:07:09 76

原创 二分图

概念:当且仅当图中没有奇数环(奇数环:环,环的边是奇数)二分图:不存在奇数环(奇数环:环且边为奇数) 二分图一定没有奇数环 证明方法--染色法1—白2—黑实现方式--深广搜下面是深搜模板:#include<iostream>#include<cstring>using namespace std;const int N = 1e5 + 10;int h[N], e[2 * N], ne[2 * N], idx;int n, m;int

2021-08-13 23:07:31 132

原创 prim(普里姆)

#include<iostream>#include<cstring>using namespace std;const int N = 510, INF = 0x3f3f3f3f;int g[N][N];//存邻接矩阵int dist[N];//存储其他点到当前最小生成树的距离bool vis[N];//存最点是否在最小生成树中int n, m;int prim(){ memset(dist, 0x3f, sizeof dist); dist[1] ...

2021-08-12 23:22:21 82

原创 克鲁斯卡尔

//按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路//每次选边权最小的边(不成环--用并查集)const int N = 1e5 + 10;int n, m;int q[N];struct edge { int a, b, w;}edges[2 * N];//存边class cmp {public: bool operator ()(const edge e, const edge w)const { return e.w < w.w; }...

2021-08-12 22:46:07 62

原创 迪杰斯特拉(堆优化)

使用堆优化的原理是小根堆查找最小距离是O(1)的,排序是log2n ,复杂度从n2优化到O(mlog2n)#include<iostream>#include<queue>#include<cstring>using namespace std;typedef pair<int, int> PII;const int N = 150010;int h[N], e[N], w[N], ne[N], idx;int dist[N];

2021-08-12 00:01:59 202

原创 拓扑排序 (模板)

将入度为零的点加入队列,扫描入度为零的点的相邻点,将齐入度消减,如果出现入度为零的点将其加入队列,重复操作直到队列size为零#include<iostream>#include<cstring>using namespace std;const int N = 100010;int n, m;int h[N], e[N], ne[N], idx;//邻接表int d[N];//入度int q[N], hh, tt;//队列 hh 头指针 tt 尾指针

2021-08-11 23:31:20 111

原创 字符串哈希

#include<iostream>#include<string>using namespace std;// h[i]前i个字符的hash值// 字符串变成一个p进制数字,体现了字符+顺序,需要确保不同的字符串对应不同的数字// P = 131 或 13331 Q=2^64,在99%的情况下不会出现冲突// 使用场景: 两个字符串的子串是否相同typedef unsigned long long ULL;const int N = 100010, P...

2021-08-11 23:27:53 54

原创 数据结构(堆)

#include<iostream>using namespace std;const int N = 1e6 + 10;int h[N], Size;//size 堆的大小int n;void down(int u) { int t = u; if (u * 2 <= Size && h[u * 2] < h[t])t = u * 2; if (u * 2 + 1 <= Size && h[u * 2 + 1] &l.

2021-08-10 22:34:13 52

原创 快速排序(模板)

#include<iostream>#include<algorithm>using namespace std;const int N = 1e6 + 10;int a[N], n;/*双指针思想i 为左指针 r 为右指针每次选左边第一个数或右边第一个数为判断值 也可以是数组中随机一个值双指针操作 让数组左边全都 <= x 右边全都 >=x 递归重复排序*/void quick_sort(int* a, int l, int r) ...

2021-08-10 22:29:12 112

原创 哈希(散列表)模板

1.开放寻址法优点:只用开一个数组#include<iostream>#include<cstring>using namespace std;const int N = 2e5, null = 0x3f3f3f3f;//取题目数据范围外的值作为 空的标记int h[N], n;//数组一般开题目数据量的 2 - 3 倍int find(int x){ int k = (x % 200003 + 200003) % 200003; while ..

2021-08-10 22:27:12 85

原创 归并排序模板

#include<iostream>#include<algorithm>using namespace std;const int N = 1e5 + 10;int a[N],tmp[N];//tmp 临时数组void merge_sort(int* a, int l, int r) { if (l >= r)return; int mid = l + r >> 1; merge_sort(a, l, mid), merge_...

2021-08-09 23:18:42 38

原创 离散化模板

unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址 //待离散化数组 vector<int> v1; for (int i = 0; i < n; i++)cin >> e, v1.push_back(e); sort(v1.begin(), v1.end()); //unique把数组中重复元素放到数组尾 返回数组尾(没有重复..

2021-08-09 23:17:04 80

原创 高精度(加减乘除)

#include<iostream>#include<vector>#include<algorithm>#include<string>using namespace std;//引用速度快vector<int> add(vector<int>& a, vector<int>& b) { if (a.size() < b.size())return add(b, a); vect.

2021-08-09 23:11:55 66

原创 屠龙(快速幂&&排列组合)

题意:巨龙昆图库塔卡提考特苏瓦西拉松又把公主抢走了,为了夺回公主米拉苏娜丹妮谢莉红,国王召集了n个勇士(n<1e9),并从中任选k个人组成骑士团(1<=k<=n),k个人中任选一个人为圣骑士,询问成团方案数为多少?数据对1e9+7取模注:圣骑士不同则视为方案不同思路:在n个人中选k个—— ,从1到k++...+=圣骑士不同案不同K×AC代码#include<iostream>#include<algorithm>u...

2021-08-06 00:21:39 81

原创 优先队列与pair

搜了许多博客都没发现自己想用的方式,自己慢慢想出来了#include<iostream>#include<queue>#include<vector>#include<algorithm>using namespace std;//优先队列 存储数据类型 储存容器 谓词(排序方法)priority_queue<pair<int, int >, vector<pair&lt

2021-07-24 22:04:23 746 1

原创 迪杰斯特拉

做关于求最短路径问题时有三种基本算法这里分享一种(迪杰斯特拉算法)void djs() { for (int i = 1; i <= n - 1; i++) { mix = INF;//每次让mix最大 方便下一次找最小值 for (int j = 1; j <= n; j++) { if (!vis[j] && dis[j] < mix) {//当j未被访问 j的最短距离小于mix(及j是存在的点) u = j;//记录j的坐标

2021-07-23 22:49:22 73

哈夫曼树 哈夫曼树C++实现

哈夫曼树C++实现 适用于学习哈夫曼算法

2023-11-26

字符串算法+BF算法+KMP算法+马拉车算法

BF算法+KMP算法+马拉车算法 C++实现

2023-11-26

数据结构+并查集+并查集C++实现

并查集

2023-11-26

数据结构+哈希表+字符串哈希+冲突处理方法+离散化

哈希表

2023-11-26

空空如也

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

TA关注的人

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