自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

heaven5heep blog

More than code

  • 博客(53)
  • 收藏
  • 关注

原创 C++常用排序模板

排序区分的主要依据就是算法是否是基于比较的leetcode排序算法可视化图是leetcode题解上的这里不打算具体的说计数排序和桶排序,因为思路较为简单代码均在leetcode上测试过,可以放心的使用选择排序class Solution {public: vector<int> sortArray(vector<int>& nums) { int n = nums.size(); for (int i = 0; i

2021-01-09 14:32:58 338

原创 排序

# 排序区分的主要依据就是算法是否是基于比较的[leetcode排序](https://leetcode-cn.com/problems/sort-an-array/)![20210109135702](https://picsheep.oss-cn-beijing.aliyuncs.com/pic/20210109135702.png)[算法可视化](https://github.com/heray1990/AlgorithmVisualization)图是leetcode题解上的

2021-01-09 14:31:53 166

原创 vim

three basic mode of vimcommand mode, also is default mode. all the alphanumeric keys are bound to commands. Typing dd will delete an entire line.insert mode: type i (for insert) to enter the insert mode and the keys will behave what u expect. Hit the Es

2020-12-13 19:49:33 129

原创 莫里斯遍历

莫里斯遍历有关二叉树的遍历算法非递归,无额外空间,时间复杂度O(n) 空间复杂度O(1)很巧妙的遍历算法核心思想就是利用树节点中的空指针考虑非递归算法,如果我们不用栈的话,最主要的问题就是遍历完一个节点的左子树后怎么回到这个节点并遍历他的右子树在遍历左子树的时候,最后一个遍历的节点一定是二叉树中序遍历中,当前节点的前一个节点也就是当前节点左子树的最右边的节点我们可以把这个前驱节点的右子树设为当前节点,这样遍历完左子树的时候,也就是遍历完这个前驱节点的时候,我们可以通过先前设置的那个指针回到当

2020-12-13 19:46:57 228

原创 effective c++

条款01:视C++为一个语言联邦C++主要的次语言总共只有四个(sublanguage)C:C++仍然是以C为基础,区块,语句,预处理器,内置数据类型,数组,指针等Object-Oriented C++:这部分就是C with Class,类,封装,继承,多态,虚函数等Template C++:这是C++的泛型编程,template metaprogramming (TMP 模板元编程)STL:template程序库,由容器,迭代器,算法以及函数对象所组成每个次语言都有自己的规约,C++高效编

2020-12-13 19:45:35 562

原创 算法小总结

mt19937参考文章mt19937参考文章uniform_int_distribution参考文章random_devicemt19937是C++11中新加入的特性。Mersenne Twister算法译为马特赛特旋转演算法,是伪随机数发生器之一,其主要作用是生成伪随机数。Mersenne Twister有以下优点:随机性好,在计算机上容易实现,占用内存较少(mt19937的C程式码执行仅需624个字的工作区域),与其它已使用的伪随机数发生器相比,产生随机数的速度快、周期长,可达到2^1993

2020-12-13 19:43:01 159

原创 C++ auto

c++ auto参考文章参考文章需要使用本地拷贝时,用auto,需要保证拷贝构造函数等必须存在,即拷贝一份新的变量使用auto&&时,总会使用引用,但是如果使用的对象是一个临时对象,比如返回值是按值传递的,他就会和局部变量的表现相同,不会改变原对象使用auto&时保证你总是在使用一个对其他变量的引用,由于不能对临时对象进行引用,所以可以使用auto&&代替const auto &和auto &&是相似的,但是他不能更改,是只读的但

2020-12-13 19:40:11 276

原创 B树

参考文章参考文章B树是一种平衡的多路查找树,每个节点储存x个数据,并由这x个数据划分出x+1段空间来分配子节点这个图解释的很清楚,这个就是3阶的B树,非叶子节点有2个数据和3个指针组成B树有一个性质就是所有叶子节点都在同一层,这个看一下第一篇参考文章中有一个gif,就可以理解的很清楚B树是怎么平衡的了查找的时候在节点上进行二分搜索,查找对应的区间,然后不断寻找需要的数据B+树是针对B树在计算机上的优化主要是针对磁盘IO的优化,B+树的非叶子节点不储存数据,让数据在都储存在叶子节点中,这样不需

2020-12-13 19:39:17 150 1

原创 图上再拓展——负环

之前有写过有关于spfa判断负环的原理,但是奈何用入度出度的比较牵强,而且怎么想也想不明白,今天看到了白皮书上的bellman—ford,再加上看到了知乎上各位大神的解释,也算通畅了许多毕竟Dijkstra还是主流算法,而队列优化的bellman是不稳定的,但是dijkstra有一个致命的缺陷就是不能处理负环——对点的增广中不能确定当前点是否是已经确定的最小距离的点,所以对于noip选手来说spf...

2020-12-13 19:32:56 53

原创 C++ 11/14/17 新特性

c++新特性nullptr空指针 防止隐式的类型转换 NULL 和 0constexpr常量表达式 constexpr函数可以使用递归constexpr int fibonacci(const int n) { return n == 1 || n == 2 ? 1 : fibonacci(n-1)+fibonacci(n-2);}并且从c++14开始,constexpr函数内可以使用局部变量,循环,分支等简单语句if/switch 语句初始化c++17让我们可以在if或swit

2020-12-13 19:28:27 226 1

原创 lua入门(1)

适合有一定编程基础的人观看最好学过c/c++lua是脚本语言解释型语言 即 写一句就执行一句,不像c语言是编译型语言 即 全写完一起编译再执行配置环境https://github.com/rjpcomputing/luaforwindows/releases去上面下载一个就行怎么测试?打开cmd 输入lua进入交互模式第一个程序print('hello world')结果就输出了,很容易对吧print后面加什么就输出什么变量命名:想咋命名就咋命名 ×

2020-05-31 23:41:37 109

原创 android wrap_content不能设置居中问题

纯属个人理解,不知道对不对设置居中用的是gravity,这个应该是设置文本的位置,就是控件上面的东西的位置,而不是控件的位置,所以使用了wrap_content以后控件的大小就是文本的大小,自然设置文本的位置就没用了,而如果使用match_parent扩大控件的大小,让控件与文本出现占用空间的差别,就可以设置文本的位置了。...

2020-04-15 14:51:03 308

原创 c++有关初始化列表和构造函数的问题

很多博客都有说过,const只能使用初始化列表。这里给出一个示例,因为const变量只能在定义的时候进行初始化,并且不能修改。而初始化列表就是这样实现的。但对于下面的构造函数来说,他先创建了cpu ram这几个成员变量,再进行的赋值,这时候并没有调用cpu ram这些成员的复制构造函数,而是直接调用的他们自身的构造函数。区别就在这里,初始化列表,直接初始化成员。...

2020-03-17 20:17:21 142

原创 无向图有向图最小环

floyd求。for(int k=1;k&lt;=n;k++){for(int i=1;i&lt;k;i++)for(int j=1;j&lt;k;j++)ans=min(ans,dis[i][k]+dis[k][j]+map1[j][i])for(int i=1;i&lt;=n;i++)for(int j=1;j&lt;=n;j++)dis[i][j]=...

2018-10-28 19:19:50 619 1

原创 对lucas定理的理解

简单的对lucas定理的理解,是从amberframe老师那里学习的时候听来的。lucas定理:c(x,y)=c(x%p,y%p)*c(x/p,y/p) (mod p)那么我们考虑现在是从x个格子中选y个小球放进去,在mod p意义下,我们令x=pa+q,y=pn+m我们将这x个格子划分成a列和一个大小为q的小的矩形,首先考虑往这a列格子中放小球,对于任意一列来说,如果这一列非...

2018-08-09 00:25:22 207

原创 拓扑排序

首先就是例题,神经网络。这道题有很多的做法,其实就是图的遍历,我最开始使用的bfs进行的遍历然后第二遍做用的拓扑排序,排序后就可以满足在每个层开始时前面的层一定都已经遍历完了。这也就是拓扑排序的作用;拓扑排序有两种写法,一种是记录出入度,用队列进行模拟,每次遍历完一条边之后将这条边的终点的入度减1,当有点的入度为0时,说明这个点之前的点都被遍历完了,那么将这个点加入队列继续遍历就好,如果入度出现了...

2018-07-12 22:32:59 121

原创 usaco section 2.1 健康的荷斯坦奶牛 dfs剪枝——迭代加深

其实就是简单的dfs加一个最优性剪枝,如果当前已选的大于最优解,就剪枝,思路很简单还有一种做法就是迭代加深,每次固定要搜的深度,第一次找到解一定是最优解,因为从小到大枚举递归深度,选择饲料也是从小到大,满足字典序。还有一点要注意,dfs枚举时不能图简单像dfs(x+1,pos+1);dfs(x,pos+1);这样写,因为尽管思路明确,但是最终叠的栈帧过多会导致爆栈,所以以后应尽量避免这样的写法df...

2018-06-02 13:06:32 330

原创 记忆化搜索——加分二叉树

主要是利用了树的中序遍历的性质,注释中有。。很常见的记忆化搜索,在之中记录了区间的根节点,最后递归遍历输出代码:#include&lt;iostream&gt;using namespace std;int n;int score[40],dp[40][40],rec[40][40];int dfs(int l,int r){ if(dp[l][r])return dp[l][r]; /...

2018-05-30 12:40:52 191

原创 洛谷月赛——随机算法

洛谷的月赛第二题:偷上网题目描述Alice 和 Bob 生活在一个l \times ll×l的正方形房子里,由于 Bob 最近沉迷隔膜,Alice 决定要限制 Bob 上网的频率。Alice 建造了nn个无线信号屏蔽器,第ii个位于(x_i, y_i)(xi​,yi​),屏蔽范围为\frac{l}{n}nl​。Bob 网瘾发作按捺不住上网的冲动,找到了你,帮他找到一个位置(x...

2018-05-20 13:26:37 387

原创 垃圾陷阱题解

#include&lt;iostream&gt;#include&lt;cstring&gt;#include&lt;algorithm&gt; //两种转移方程using namespace std; //如果先处理放struct trash //dp[i][j+t[i].h]=dp[i-1][j];{ ...

2018-05-05 12:24:42 151

原创 stl优先队列的简单应用

#include&lt;iostream&gt;#include&lt;algorithm&gt;#include&lt;queue&gt;using namespace std;struct cmp1{ bool operator ()(int &amp;a,int &amp;b) { return a&lt;b; }};struct cmp2{ bool operator ()(int &a...

2018-04-07 13:27:20 140

原创 线段树单标记下穿【模板】

#include&lt;iostream&gt; //原谅我又用了好多英文..#define mid (l+r)/2using namespace std;const int maxn=1000000;long long sum[maxn],flag[maxn],size[maxn]; //sum为求和 flag为懒标记 size为区间长度int n,m,x,y,z,...

2018-03-19 12:33:38 151

原创 最小生成树——kruskal

codevs上的一道模板题,最小生成树的意思大概就是,给好多条边和权值,让用最小的代价(权值和)使这个图连通如果这个图一共有n个点,那么做法就是对于每一个边的权值给边排序,从小到大,然后从小里选,如果选出的边的两个点已经在一个集合里了就跳过,如果不在一个集合里,就并上这两点,同时ans加上这条边的权值,由于排过序,所以每次并边的代价一定是最小的,并且记录并边的次数,如果次数==n-1,

2017-11-08 14:44:15 194

原创 日常学习

刚才做着题,发现出现了莫名的bug,调了半天才发现问题,写程序的时候一定要记得不要在循环嵌套里改变循环的变量,不然总会出现蜜汁bug

2017-11-08 08:18:58 142

原创 选择客栈X无线通讯网 二合一

啥都不说了直接上码唯一一点就是第一份码里的sum和f,sum[i][j]就是到i点的时候j颜色的数量,f[i]就是距离i最近的左边的客栈然后就是第二个中,s-1是可以消去权值的边,p-1是生成树的边,p-1-(s-1)就等于p-s,就是最终循环跳出的边#includeusing namespace std;const int MAXN=200005;int qian[MAX

2017-11-07 20:57:54 149

原创 倍增的模板,注释都在上面了

#include#include#define MAXN 500001using namespace std;int f[500005][100];int n,m,s;int dep[MAXN];int tot;int g[MAXN*2];struct line{int to;int next;}edge[MAXN*2];void added

2017-11-07 11:20:41 357

原创 spfa——文化之旅

就像是玛丽卡和最有贸易一样,这道题应该也算是很经典的spfa的题目,在spfa的过程中增加了一个判断文化的函数,其他的地方都没什么太大的变化#includeusing namespace std;const int MAXN=100001;const int INF=9999999;int tot,n,m,k,s,t;int g[MAXN];int q[MAXN],di

2017-11-07 11:17:50 211

原创 tarjan--lca

自己写的一个 模板,可以拿来参考一下#include#include#define MAXN 500001using namespace std;int n,m,s;struct line{int to;int next;}edge[MAXN*2];struct query{int to;int next;int id;}ques[M

2017-11-06 20:25:08 158

原创 归并排序--逆序对

按照刘汝佳说的,归并排序分三步1.划分问题,即把序列分成元素尽量相等的两半2.递归求解3.合并子问题其实就是把一个序列不断的二分,直到只有两个元素的时候,然后排序,然后返回,再排序。先上代码#includeusing namespace std;long long a[100005],t[100005];long long ans=0;void merges

2017-11-06 19:57:03 320

原创 二分模板

void solve(){int lb=0;int ub=len;while(lb{int mid=(lb+ub)/2;if(check(mid))lb=mid+1;else ub=mid-1;}cout}这里要注意几点1. lb2.最终答案是mid,也就是lb-1;3.更换边界的时候要记得加减1还有一种方法是whil

2017-11-06 14:36:34 141

原创 日常学习——区间覆盖

今天学习了三种解决区间覆盖问题的 方法,也学到了一种新算法,floodfill,用dfs+记忆化搜索实现这里就先不说了,主要想说的是区间覆盖先说大概的问题,就是用最少的线段覆盖最多的区间首先第一种:贪心先对左端点进行排序,然后选择第一条,在第一条的右端点向左枚举每个线段的左端点,也就是在左端点小于当前右端点的所有线段,然后选取右端点最大的一个,更新右端点,算法的复杂度只有O(N),

2017-11-03 21:03:40 736

原创 codevs 3731 寻找道路

这道题简直丧心病狂,对人的理解力要求我觉得很高,反正我是被坑了好几次才打出了样例,这是今天考的题,通过这个题我深切感受到自己经验的不足以及做题经验缺乏带来的严重后果最重要的就是把简单的变难了;就这道题来说吧,有这么几点:逆向dfs在求解终点不能到大的道路的时候,要注意判断是否来过这个点,否则遇到了环就爆栈了再判断不能走的点的时候最好新建一个数组,不能乱改,否则就会出很大差错,并且不

2017-10-31 20:44:37 149

原创 洛谷p1967货车运输简单60分做法

类似于舒适的路线,枚举加并查集思路很明确对于每一个车都初始化,然后从大到小加边,当出发点和终点并到一起的时候的边的权值就是最大负重,实现也比较简单#include#include#include#include#include#includeusing namespace std;int pre[10001];int rank[10001];st

2017-10-31 19:46:16 235

原创 spfa再拓展—最优贸易

两种做法,感觉自己对spfa的理解更深了一步,希望自己能在noip之前完全将spfa化成自己的东西第一种是从学姐那里学来的建立一个柱状图,分为三层,第一层和第二层之间是买入,第二层和第三层之间是卖出,然后n*=3,就是第一层1到第三层n,改一下spfa,求最大值就行了,建图的时候层与层之间要是单向边,因为只能买一次,卖一次第二种,这种方法自己画个图比较好先正向建图,也是要改

2017-10-30 23:05:07 144

原创 spfa的探究

负环问题spfa中,判断负环的方法是判断一个点进队次数有没有超过n次原理:如果一个点,入度为k,如果每一次到这个点的时候都会进行松弛的话,则这个点最多进k次队列,在一个图中,n个点,其中一个点的入度不会大于n-1,所以这个点进入队列的次数也就不会大于n-1;

2017-10-29 22:08:33 211

原创 洛谷二连:1280尼克的任务——1282多米诺骨牌

先说尼克的任务吧,总体上不难,晋级+大概,用一个滚动数组就可以很方便的解决掉题(二维数组不仅麻烦,而且写的多,不好写,容易出错)这道题特点有两个,1要判断一下当前时间的任务的个数,如果没有任务,就ans++,如果有的话,就枚举当前这个点的任务个数,然后更新状态。2就是要逆序推,尽管滚动数组本来就要逆序推,这也是为什么我说滚动数组比较方便的原因,如果使用二维数组的话,或者更高维,就要正向推,

2017-10-27 22:04:47 181

原创 舒适的路线

思路就是并查集+枚举把每条边按速度排序,从大到小枚举大的边,然后再枚举小的边,都并到一个集合中,如果发现起始点和终止点在一个集合中了,说明当前的边就是当前最大边中的最小边,然后用这个比值更新最终结果,不要忘记约分,而且如果最小边是最大边的因数的话也要特判。还有就是浮点数的处理,把大边改成浮点型再比上小边,不然codevs只能对三个点上码:#include#includeus

2017-10-27 21:52:50 252

原创 玛丽卡 80分

#include using namespace std;int main(){ int a, b; //定义两个变量名 cin >> a >> b; //从标准输入流中输入两个整数 cout << a + b << endl; //输出到标准输出流中}// 完成程序以后,点击下方的提交,即可看到测试结果*/#include#define INF 9999

2017-10-27 21:00:54 177

原创 洛谷p1282多米诺骨牌

这道题说实话是挺难的,看标签已经到了省选的层次,但实际上推出了状态转移方程,其他的问题也就迎刃而解了(才怪)我是不会说我推出了正确的状态转移方程还调了一个多小时结果还是wa4个点的dp[i][j]为前i个数字,第一行为j的时候的最小翻转次数,则有dp[i][j]=min(dp[i-1][j-a[i]],dp[i][j]) (j>=a[i]时)表示不可以换当j>=b[i]时表示可以换,则

2017-10-25 13:37:01 212

原创 低价购买

刚才在洛谷上做了一道题,说实话感觉还是很恐怖的,一道线性动规,题号1108,名字叫低价购买。整题不难理解,分为两问,第一问就是求最长下降子序列,nlogn或者n²都可以,但是第二问是求最长下降子序列的个数,并且不能重复,这里就比较恶心了,我看了很多的题解才终于明白,自己写的时候也是迷迷糊糊,完全没有自己写的感觉,更像是背过的一样。不管怎么说,这道题暂时还是过去了,但是我感觉我很快就会忘掉,而且

2017-10-25 00:30:58 188

空空如也

空空如也

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

TA关注的人

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