自定义博客皮肤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 866

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

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

2023-11-30 22:33:37 519

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

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

2023-11-29 21:26:45 583

原创 C++ | shared_ptr

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

2023-11-29 21:18:11 593

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

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

2023-11-25 23:43:49 532

原创 C++ | 引用和指针

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

2023-11-25 21:55:46 563

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

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

2023-11-23 00:58:56 897

原创 Unity | PolyBrush

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

2023-11-19 23:31:07 458

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

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

2022-06-03 14:35:58 861

原创 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 256

原创 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 12043

原创 卡特兰数——网格

原题链接 卡特兰数公式 变形一下 用分解质因数求组合数解 #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 538

原创 [洛谷]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 480

原创 高斯消元

高斯消元模板 #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 378

原创 中国剩余定理

中国剩余定理用于求解同余方程 公式 其中 为 模 下的逆元 例题:生物节律 阿九大战朱最学 //阿九大战朱最学 #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 405

原创 A. Busiest Computing Nodes

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

2021-09-22 17:51:21 292

原创 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 144

原创 二分图

概念: 当且仅当图中没有奇数环(奇数环:环,环的边是奇数) 二分图:不存在奇数环(奇数环:环且边为奇数) 二分图一定没有奇数环 证明方法--染色法 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 216

原创 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 130

原创 克鲁斯卡尔

//按照权值从小到大的顺序选择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 110

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

使用堆优化的原理是小根堆查找最小距离是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 315

原创 拓扑排序 (模板)

将入度为零的点加入队列,扫描入度为零的点的相邻点,将齐入度消减,如果出现入度为零的点将其加入队列,重复操作直到队列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 164

原创 字符串哈希

#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 105

原创 数据结构(堆)

#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 90

原创 快速排序(模板)

#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 206

原创 哈希(散列表)模板

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 151

原创 归并排序模板

#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 85

原创 离散化模板

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 133

原创 高精度(加减乘除)

#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 125

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

题意: 巨龙昆图库塔卡提考特苏瓦西拉松又把公主抢走了,为了夺回公主米拉苏娜丹妮谢莉红,国王召集了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 162

原创 优先队列与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 897 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 124

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

并查集

2023-11-26

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

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

2023-11-26

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

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

2023-11-26

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

哈希表

2023-11-26

空空如也

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

TA关注的人

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