自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Typora中使用mermaid的流程图节点布局问题

typora中mermaid画流程图渲染问题

2022-10-24 15:51:22 838 1

原创 算法笔记(18):较为完美的快排代码

2022-06-17 21:20:17 152

原创 算法笔记(17):涉及左闭右开区间的防止死循环方式

在算法中有很多问题涉及左闭右开区间,如快速排序,二分查找以及很多数组分治策略。在编写这些算法过程中使用左闭右开区间很容易导致死循环(被折腾了好几个小时之后有感~)。故写此篇文章来防止这样的错误。记区间左端点为 lll,右端点为 rrr,区间为左闭右开 [l,r)[l,r)[l,r)。以二分查找为例:int solve1(vector<int> &a, int k){ int l = 0; int r = a.size(); int mid; whi

2022-03-19 15:19:02 299

原创 c++文件的二进制方式和文本方式读写文件

Windows读二进制方式读(打开文件时加上ios::binary参数)>>方式:将文本中的内容看作字符串转化后读入数据中,不会读入\n、\r、空格等。考虑in >> a,根据a数据类型的不同来进行不同的转化。例:int a;则读入a为123123,在计算机中的编码是整型123123对应的编码,而不是文件中存储的字符型编码。若文件为:则读入失败,a置任意值(大多数情况下为0),in.good()置0。read方式:把文件中存放的内容的编码原封不动直接读入数据中,。

2021-11-10 10:30:17 1372

原创 linux和windows下回车与文件差异比较

回车差异在windows下,回车会被当做\r\n写入文件中;而linux下,回车被当做\n写入文件中。这里发现一个重要的差异。当在windows下创建一个文件时,在文件中的写入的回车都会被当做\r\n,即使将该文件移入linux平台下,其仍然具有该属性。同理linux,当在linux下创建一个文件时,在该文件中写入的回车都会被当做\n,即使该文件移入windows平台下,其仍然具有该属性。猜想写入回车的方式应该是文件本身的属性,在不同平台下创建文件时,其被赋予不同的属性,所以对待回车的方式与该文件

2021-11-09 23:33:18 924

原创 vscode workspace详解

"workspace"是什么?workspace指的是在窗口中打开的一个或者多个文件夹,他们共同构成一个工作区。当有多个文件夹时,称作 Multi-root workspaces.如何使用workspaceworkspace的使用与vscode的层级设置(优先级高的设置会override优先级低的设置)密切相关,vscode有两种修改设置的方式vscode 设置一、通过图形界面修改打开图形界面在图形界面中可以选择修改各个板块的设置,如全局设置,工作区设置和文件夹设置(workspace界面要

2021-11-05 10:50:33 14993

原创 已知二叉树前序和中序遍历来构建二叉树

#include <iostream>#include <string>using namespace std;typedef struct BiTNode{ char data; BiTNode *lc, *rc;} BiTNode, *BiTree;/*递归方式*/BiTree solve(const string &pre, const string &in){ if (pre.empty() && i

2021-11-03 11:08:22 110

原创 二叉树先中后序遍历的递归实现与非递归实现

递归实现typedef struct BiTNode{ char data; BiTNode *lc, *rc;} BiTNode, *BiTree;/*先序遍历*/void PreOrderTraverse(const BiTree T){ if (T) cout << T->data; else return; PreOrderTraverse(T->lc); PreOrderTrav

2021-11-02 19:48:29 265 1

原创 算法笔记(15):二分偏序问题

二分偏序问题通常以i>(<,≥,≤)j,ui>(<,≥,≤)vji>(<,\ge,\le)j,u_i>(<,\ge,\le)v_ji>(<,≥,≤)j,ui​>(<,≥,≤)vj​等形式出现,求符合以上两种情况的有序对的个数,朴素来讲这种题目可以用O(n2)O(n^2)O(n2)的复杂度来解决,但可以用树状数组来优化,使其复杂度为O(nlog⁡n)O(n\log n)O(nlogn)典型的二分偏序问题,逆序对P1980 逆序对首

2021-10-27 11:01:34 115

原创 算法笔记(14):树状数组

树状数组的原理在树状数组中,tree[k]tree[k]tree[k]维护了∑i=k−lowerbit(k)ka[i]\sum_{i=k-lowerbit(k)}^k{a[i]}∑i=k−lowerbit(k)k​a[i]。其支持单点修改和区间查询操作。本质上树状数组是利用了二进制的性质的一种数据结构,下面我们分别来看单点修改和区间查询是如何以一个较低的复杂度实现的。先给出lowerbit的实现:int lowerbit(int x){ return (x & (-x));//返回x的

2021-10-27 10:28:52 96

原创 算法笔记(13):埃氏筛与欧拉筛

在刷算法题的时候经常遇到与质数有关的问题,而普通方式筛选质数十分耗时(判断n是否为质数的O(n)O(n)O(n) 或O(n)O(\sqrt{n})O(n​)比较耗时),故今天学习了埃氏筛和欧拉筛两种算法。埃氏筛int prime[N];//记录[1,N]中所有质数,从小到大排序int vis[N];//vis[i]=1当i是合数vis[0] = vis[1] = 1;for (int i = 2; i <= N; i++){ if (!vis[i]) { pr

2021-10-26 20:45:54 114

原创 算法笔记(12):字符串匹配算法KMP(substr)

记ppp为模式串,aaa为文本串。#include <iostream>#include <cstring>using namespace std;const char *p = " QAQ";const int lenp = 3;const int N = 1e6 + 5;int dp[lenp][256];//dp[i][j]指当处于i状态,遇到字符j时的下一个状态char a[N];int main(){ int x = 0; cin

2021-10-26 12:09:16 127

原创 牛客竞赛小白月赛39补题

HAC代码:#include <iostream>#include <algorithm>using namespace std;using ll = long long;const int N = 1e6 + 5;ll a[N];ll dp1[N], dpl[N]; //dp1[i]维护前i只需要砍的次数,dpl[i]代表以第i只为最左边挥刀次数。ll dp2[N], dpr[N]; //dp2[i]维护后i只需要砍的次数,dpr[i]代表以第i只为最右边挥

2021-10-24 16:44:49 71

原创 docker搭建linux环境艰辛历程

在啃csapp的时候偶然了解到他的lab十分高质量,于是准备写写lab,但是他是基于linux系统的,故需要在windows上搭建一个linux系统,主流有两种做法购买云服务器,在本地写代码然后上传到云服务器,在云服务器编译运行代码。利用docker建立容器将本地文件挂载上远程的linux系统,这样远程文件与本地文件能够同步。一开始采用方法2按照网络教程搭建在拉取镜像后,创建容器的命令行使用部分错误,导致创建的容器下文件挂载有问题,如下图在指定本地文件绝对路径后少了:/(linux下共享文

2021-10-23 20:29:37 360

原创 AutoX安途杯中山大学程序设计校赛-补题

ac代码:#include <iostream>#include <cmath>using namespace std;int ans;void dfs(int a[], int len){ if (len == 1) { ans = min(ans, a[1]); return; } int t[15]; for (int i = 1; i < len; i++) { .

2021-10-18 10:47:29 279

原创 2021 ccpc 赛后补题

jumping monkey大致题意:有一颗nnn个节点的树,由n−1n-1n−1条边连接而成,每个节点有一个权值aia_iai​,对于树上任意两个节点uuu,vvv,monkey能从uuu跳到vvv当且仅当ava_vav​是从uuu到vvv的最短路径(由于是树,故任意两个节点只有一条不经过重边的路,最短路径即该条路)所经过节点中权值最大的节点,问monkey从k(k∈(1,n))k(k\in(1,n))k(k∈(1,n))出发,最多能经过多少个节点。分析:刚开始的想法是求出每个节点iii能跳的

2021-10-14 09:24:15 229

原创 算法笔记(11):求解字符串的subsequence

const char *p = " 需要匹配的字符串";const int lenp = strlen(p+1); dp[0][0] = 1;//必要初始化过程 for (int i = 1; i <= lena; i++) { dp[i][0] = 1;//必要初始化过程 for (int j = 1; j <= min(i, lenp); j++) {

2021-10-11 14:37:39 100

原创 算法笔记(10):树上dp

ac代码#include <iostream>#include <vector>#include <algorithm>using namespace std;const int N = 6e3 + 5;int r[N];bool worker[N]; //标记第i个人是否有上司,用于找出校长int n;vector<int> edge[N]; //由于不一定是二叉树,故用图的方式存树int dp[N][2]; //树上.

2021-09-15 11:10:30 61

原创 算法笔记(9):floyd算法和dij算法的比较

今天发现两算法用队列优化时表现出许多相似性,而且队列优化思想与未优化的思想有所不同,容易产生误解,故总结一下Floyd算法核心for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = d

2021-08-25 22:15:45 238

原创 2021集训新生赛4:区间覆盖PLUS

#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1e5 + 5;struct line{ int l, r; int w; bool operator<(const line &l) { return w < l.w; }} a[N];stru

2021-08-24 15:01:57 64

原创 算法笔记(8):二叉搜索树

今天学了一种名为二叉搜索树的数据结构并自行实现了一番,写的过程发现了很多容易错的部分,现将其总结一下。性质任意节点的键值大于其左子树上所有节点的键值,小于其右子数上所有节点的键值(一般二叉搜索树中不存在键值相同的节点)能够在O(logn)内做到删除、添加和查找节点一般用链表来存储实现自己写的代码template <class _Ty>struct treenode{ _Ty val; treenode<_Ty> *l; treenode&

2021-08-15 22:06:38 72

原创 2021-08-14

算法笔记(7):01背包问题与完全背包问题的内存优化一般实现代码01背包问题const int max_n = 105;const int max_m = 10005;int n, m;//n种物品,总重不超过mint dp[max_n][max_m];//dp[i][j]指从前i个物品中选,总重不超过j时的背包最大价值int w[max_n], v[max_n];void solve(){ for (int i = 1; i <= n;i++) fo

2021-08-14 18:50:35 47

原创 算法笔记(6):线段树与树状数组

简单来说,线段树比树状数组难实现,但线段树能够维护的性质多于树状数组,并且把树状数组包含在内。例如,线段树可以维护数组随机区间的最大值,并且支持随意查询;而对于树状数组来说,只能维护数组前i个元素的最大值,而无法随意查询。lis中f[i]可用树状数组来维护,具体可见收藏。...

2021-08-13 21:18:12 75

原创 算法笔记(5):剪枝

记录一下肝了一天的剪枝,洛谷P1120 小木棍 [数据加强版]惨痛教训:dfs嵌套次数是指数性的,可能每次只执行10几次的循环,经过dfs嵌套后就无比无比无比耗时!!!!故编写dfs函数时尽量避免内部循环,用参数传递等方式来记录上代码!#include <iostream>#include <algorithm>using namespace std;bool book[70]; //标记用过的木棍int n;int len; //记录木棍的原始..

2021-08-13 20:45:13 76

原创 算法笔记(4)-线段树

#include <iostream>using namespace std;const int N = 1e5 + 5;struct node{ int l, r; long long sum; long long addv;} tree[N * 4];long long a[N];long long b[N][4];//将o这一层的lazy_tag下放void pushdown(int o){ if (tree[o].addv &.

2021-08-11 10:04:34 45

原创 算法笔记(3):求两个正整数的最大公约数

int solve(int a, int b){ if (a == b) return a; if (a < b) return solve(b, a); else { if (!a & 1 && !b & 1) //a,b都是偶数的情况 return solve(a / 2, b / 2) * 2; else if (!a & 1 &am.

2021-08-10 14:57:45 152

原创 算法笔记(二)-激发思维的主元素问题最优解

#include <iostream>using namespace std;const int N = 1e5;int a[N];int main(){ int i, j; int count; int n; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; i = 0, j = 1; count = 0; whil.

2021-08-08 14:21:47 54

原创 算法笔记(一):求最短路径-dijkstra算法

#include <iostream>#include <algorithm>using namespace std;const int N1 = 20;int e[N1][N1]; //存放地图int dis[N1];int book[N1];int main(){ int i, j; int inf = 99999; int c1, c2, len; int c; //求该城市与其他城市之间距离的最小值 .

2021-08-07 19:34:22 83

原创 bellman-ford算法的队列优化

#include <iostream>using namespace std;const int N = 1e4 + 5;const int inf = 999999;//自己写一个简单队列,比stl的更实用,既可以让队首出队也可以让队尾出队struct que{ int a[N]; int head, tail; que() { head = 1; tail = 1; }};que q;bool .

2021-08-07 15:41:13 71

原创 单调队列的初步实现

#include <iostream>#include <algorithm>#include <climits>#include <list>using namespace std;const int N = 3e5 + 10;list<int> que;int main(){ int n, m; int s[N]; s[0] = 0; cin >> n >> m; .

2021-08-07 14:26:06 41

空空如也

空空如也

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

TA关注的人

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