- 博客(99)
- 资源 (6)
- 收藏
- 关注
原创 日常小收获三_STL
1、set C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。set里元素唯一,且默认从小到大排序。总的内置函数:1. begin()--返回指向第一个元素的迭代器...
2019-03-02 21:08:52
306
原创 日常小收获二_数学
1、求任意三角形的面积,海伦公式2、三角形的边和角来表示它的外接圆的半径3、三角形的三边来表示它的外接圆的半径4、三角形的三边来表示它的内切圆的半径5、三角形的边和角来表示它的内切圆的半径6、阶乘写一个程序,计算N(1≤N≤50,000,000)阶乘的最右边的非零位的值。最后取模大约7位才可以,否则可能会损失精度。代码:#inc...
2019-02-27 20:05:39
223
原创 日常小收获
Winter Holiday Training Competition 2019, Post-competition Reflections1、Cutting OutCodeForces - 1077D这是第四场的训练赛中的一个题目,这个题就是利用二分找最优解,最后输出,挺常规的题目,当时在第40个样例T了4次,当时真的不甘心,现在看来只能怪自己的思维不够严谨。一方面:在二...
2019-02-01 16:54:22
270
1
原创 最短路算法和最小生成树算法详解
算法解决问题核心思想时间复杂度负权边是否贪心Dijkstra单源最短路选最近的点进行扩展OElogVOElogV不支持是单源最短路对所有边进行V-1轮松弛OV⋅EOV⋅E支持,可检负权环否 (DP)SPFA单源最短路Bellman-Ford的队列优化平均OkEO(kE)OkE,最坏OV⋅EOV⋅E支持,可检负权环否所有顶点对最短路动态规划,枚举中转点OV3O(V^3)OV3支持,不可有负权环。
2025-09-08 10:54:23
992
原创 C++函数指针完全解析(C++面试)
在C++中,函数和变量一样,在内存中也占据着空间。函数的代码存储在内存的代码区(Code Segment)。每个函数都有一个起始地址,这个地址就是函数的入口点。函数指针 (Function Pointer)就是一个专门用来存储函数入口地址的指针变量。通过这个指针,我们可以间接地调用它所指向的函数。
2025-09-08 10:40:07
701
原创 几何谓词orient3d讲解
这种错误的符号判断会像病毒一样在算法中传播,导致程序产生荒谬的结果,比如生成一个扭曲的网格、错误的拓扑结构,甚至陷入无限循环而崩溃。1997年,Jonathan Richard Shewchuk 在其里程碑式的论文中提出了一个极其优雅且高效的解决方案,至今仍是该领域的黄金标准。然而,当理论撞上计算机硬件的现实时,一场“看不见的危机”便发生了。在实践中,超过99.9%的计算都会在这里通过,我们以接近硬件的速度得到了可靠的结果。这保证了在简单相加时,它们的尾数不会重叠,从而不会引入新的舍入误差。
2025-09-04 11:29:45
724
原创 最小生成树算法详解
Kruskal算法的贪心策略是"全局贪心"—考虑整个图中权值最小的边。算法维护一个森林,初始时每个顶点自成一棵树。随着边的加入,森林中的树逐渐合并,最终形成一棵包含所有顶点的最小生成树。最小生成树(MST)问题的核心思想基于一个贪心策略:我们总是选择当前可用的最小权值边,同时保证不形成环路。这个简单而强大的思想支撑了两个经典算法。Prim算法的贪心策略是"局部贪心"—考虑当前树到其余顶点的最小边。算法维护一个不断生长的树,每次选择一个最近的顶点加入。
2025-09-03 19:17:47
518
原创 求单源最短路(Dijkstra 算法-迪杰斯特拉算法,SPFA)
特性Dijkstra (优先队列版)SPFA核心思想贪心Bellman-Ford 的队列优化数据结构优先队列 (Min-Heap)普通队列 (Queue)处理负权边不能可以检测负权环不能可以时间复杂度 (最坏)OElogVOElogV(稳定)OV⋅EOV⋅E(不稳定)时间复杂度 (平均)OElogVOElogVOkEO(kE)OkE(通常更快)适用场景无负权边的图,求单源最短路径。这是最主流的场景。
2025-09-03 19:08:51
1085
原创 线段树 (Segment Tree)
int N;// 原始数组// 线段树数组特性树状数组 (BIT)线段树解决问题单点更新,前缀区间查询单点/区间更新,任意区间查询功能较局限,但可扩展(如差分)非常灵活,支持各种区间操作(求和、最值、GCD等)复杂度O(log N)O(log N)常数小,速度非常快较大,比BIT慢2-4倍代码长度短,易于实现较长,容易出错空间复杂度O(N)O(4N)何时使用?如果问题只需要单点更新和区间(或前缀)求和/异或,并且追求极致的速度和简洁的代码,首选树状数组。如果问题涉及区间更新。
2025-08-28 20:43:56
903
原创 树状数组(Fenwick Tree / Binary Indexed Tree, BIT)
优点效率高:更新和查询都是 O(log N)。代码简短:易于实现,不易出错。空间开销小:只需要一个和原数组等大的辅助数组。局限只能处理满足结合律且有逆元的操作(如加减法、异或)。求区间最大/最小值这种操作无法直接用标准树状数组解决(需要特殊改造)。功能相对线段树较少,例如复杂的区间更新操作难以实现。常见应用单点修改,区间求和:最经典的应用。区间修改,单点查询:通过维护一个差分数组,将区间修改转化为两次单点修改,单点查询转化为一次前缀和查询。求逆序对。
2025-08-28 20:35:05
1072
原创 红黑树作业
本文是为操作系统作业而实现的红黑树源码。作业题目选题为:“(3)红黑树(rbtree)数据结构介绍及其在Linux内核中的应用(结合内核源码进行分析,内核版本号不低于2.6.0)”。提取码:1234 ),用的c++语言模板实现红黑树,并附带详细注释。(目前只实现了红黑树的插入与查询操作,并可视化打印红黑树)。红黑树总结 - lukazan - 博客园 (cnblogs.com),该博客用图详细解释了红黑树插入操作的事件,然后我用红色对其事件进行了编号,以便于和代码注释相对应)
2023-01-19 10:54:13
1522
原创 SPFA与迪杰斯特拉
网上太多对他们的讲解了。这篇就是自己学习的一个记录。SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。算法:用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功,则将其入队。 直到队列为空时算法结束。这个算法,简单的说就是队列优化的bellman-ford,利用了每个点不会更新次数太多的特点发明的此算法。SPFA——Shortest
2022-05-29 17:06:09
533
原创 c++自定义Debug输出宏
#pragma once#include <stdio.h>#include <iostream>#define RESET "\033[0m"#define BLACK "\033[30m" /* Black */#define RED "\033[31m" /* Red */#define GREEN "\033[32m" /* Green */#define YELLOW "\033[33m" /* Yellow */#define BLUE "\033[3.
2021-10-12 11:52:26
956
原创 使所有区间的异或结果为零(dp)
题意:链接:1787. 使所有区间的异或结果为零 - 力扣(LeetCode) (leetcode-cn.com)给你一个整数数组 nums 和一个整数 k 。区间 [left, right](left <= right)的 异或结果 是对下标位于left 和 right(包括 left 和 right )之间所有元素进行 XOR 运算的结果:nums[left] XOR nums[left+1] XOR ... XOR nums[right] 。返回数组中 要更改的最小元素.
2021-05-25 16:05:07
1046
3
原创 红黑树实现代码+详细注释
简介因为网上太多红黑树原理的讲解了,不需要再去讲解原理,所以在这就提供一些将原理不错的博客,然后主要是给红黑树代码的实现,用的c++语言模板实现红黑树,并附带详细注释。(目前只实现了红黑树的插入与查询操作,并可视化打印红黑树)。红黑树插入操作的流程图:(参考:红黑树总结 - lukazan - 博客园 (cnblogs.com),该博客用图详细解释了红黑树插入操作的事件,然后我用红色对其事件进行了编号,以便于和代码注释相对应)红黑树的本质其实就是2-3树,在上面推荐的博客中也有提到。代码
2021-05-19 11:44:43
1757
原创 (最易懂的解析)从第一个节点出发到最后一个节点的受限路径数(单源最短路径+拓扑排序)
题目链接:1786. 从第一个节点出发到最后一个节点的受限路径数 - 力扣(LeetCode) (leetcode-cn.com)题意:给你由n个点构成的m条边(x, y, w){从x到y有一条无向边,长度为w},构成一个连通图,然后让每个点到点n的最短路径距离作为当前点的权值,然后问从点1到点n有几条不同的路径(每个点必须往比自己权值小的点走)。1 <= n <= 2 * 104 n - 1 <= edges.length <= 4 * 104 edges[i]
2021-03-09 21:21:53
606
原创 Tensorflow placeholders使用讲解
Placeholders目前,我们已经常使用 Variables 去管理我们的数据,但是还有一个更基本的数据结构(Placeholder 占位符)需要我们去学习。占位符其实就是一个变量,该变量比较特殊,一般都在最后运行时才给他赋值。它允许我们创建操作并构建计算图,而不需要数据。在tensorflow中我们会通过这些占位符(placeholder)去把数据输入到之前构建的计算图中。im...
2020-02-29 20:59:24
3046
原创 OI国家集训队论文集1999~2018
直接放网盘:链接:https://pan.baidu.com/s/1YqJmBVRd_ZNztU3EgW1RoQ提取码:xj20复制这段内容后打开百度网盘手机App,操作更方便哦最重要的还是以上东西以下图片和文字(没啥暖用,就是看起来整体清楚点)摘自别人博客:https://blog.youkuaiyun.com/qq_41551359/article/details/9396488...
2020-02-27 17:25:54
4767
1
原创 Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix区别与特点
简介coo_matrix: 坐标格式的矩阵(coodrdinate format matrix)优点:不同稀疏格式间转换效率高(exp:CSR/CSC)构建矩阵时,允许坐标重复data = [1, 1, 1]row = [0, 1, 1]col = [0, 1, 1]matrix = sp.coo_matrix((data, (row, col)), shape=(3, 3))...
2020-02-27 17:23:05
7615
原创 2017年ICPC中国大陆区域赛 - Sum of xor sum (线段树维护子段)
题意:链接:https://vjudge.net/contest/319951#problem/T给你 n 个数,和 q 次询问,每次询问给你 [ l , r ] ,让输出在区间 [ l , r ] 里每一个子区间亦或和加和。比如: 给你三个数 1、2、3、和一个询问 [ 1 , 3 ] , 需要输出 1 + 2 + 3 + 1 ^ 2 + 2 ^ 3 + 1 ^ 2 ^ 3 。(1 ≤ ...
2019-08-20 11:43:42
811
原创 2019牛客暑期多校训练营(第九场)Cutting Bamboos (主席树+二分)
题意:链接:https://ac.nowcoder.com/acm/contest/889/H给你 n 棵树每一棵树的高度,每一棵树从左到右编号为 1, 2, ... n 。Q 次询问,每次询问(l, r, x, y)代表在编号为 [l, r] 这个闭区间内的树,我需要砍 y 次把这些树砍成高度为 0 ,但是每次砍只能规定一个高度,这个高度以上的需要全部砍去,下面的不动,且每次砍的高度之和...
2019-08-16 16:16:30
312
6
原创 Nonsense Time HDU - 6635 (思维 + LIS + 路径标记)
题意:链接:HDU - 6635给你 n 不同的且属于 [1, n] 的数列 p,然后在给你 n 个数 k1 - kn,代表 n 次操作,开始数列是被冻住的只有解冻的数才可以使用,按照给的n次操作,每次操作解冻一个位置,并输出当前所有被解冻的数的最长上升子序列的长度。解题思路:有句非常关键的语句:It is guaranteed that p1,p2,...,pn and k1,k...
2019-08-14 20:44:04
345
原创 2019HDU多校第六场 - 11 Dimensions HDU - 6644(思维+数位dp+康拓展开思想)
题意:链接:HDU - 6644给你一个长度为 n 的数字,但是把其中的某些位使用 "?" 遮住了,然后让你把 "?" 遮住的部分填上数字,使得填填上后的数字 n ,满足 n % m == 0 。 有 q 次询问,每次询问要你输出满足条件的第 k 小的 n。n,m,q(1≤n≤50000,2≤m≤20,1≤q≤100000) T(1≤T≤10000) k(1≤k≤10^18)It...
2019-08-14 20:02:35
340
原创 E - Snowy Smile HDU - 6638 (线段树维护最大连续子段和)
题意:链接:https://vjudge.net/contest/319475#problem/E给你n个点,每个点告诉你坐标还有权值(有正有负),让你画一个矩形把一些点括起来,问你矩形括起来的权值最大是多少,可以让矩阵面积为 0 ,也就是不括。解题思路:首先对 x 和 y 轴离散化,枚举一个上边界,然后从上边界开始一行一行的加入线段树中,每加一行就取一个最大,每次更新上边界就需要...
2019-08-14 09:22:51
357
原创 Bond UVA - 11354 (按秩合并优化的并查集)
题意:链接:https://vjudge.net/problem/UVA-11354给你 n 个点,m 条边无向边,每条边告诉起点和终点还有权值,q次询问,每次询问从 s 点到 t 点的路径上的最小的最大权值(最大权值最小化)解题思路:首先如果把这个无向图建成一个最小生成树,那么在最小生成树的任意两点有仅有一条路,并且也使得最大权值最小化了,但是每次都要花费 o(n) 的时间搜索,...
2019-08-13 10:22:07
215
原创 2019牛客暑期多校训练营(第八场)E - Explorer (线段树+离散化+按秩合并优化的并查集+并查集的拆除)
题意:链接:https://ac.nowcoder.com/acm/contest/888/E给你 n 个点,m 条边,每条边给你一组数 (u, v, l, r) 代表如果你想从u点走到v点,你的身高需要满足范围 [ l , r ] ,问你从 1 走到 n 点,你有多少种身高可以选择。1 ≤ n,m ≤ 10^5,1 ≤ u < v ≤ n,1 ≤ l ≤ r ≤ 10^9解...
2019-08-12 21:14:54
309
4
原创 2019牛客暑期多校训练营(第七场)H-Pair (数位dp)
题意:链接:https://ac.nowcoder.com/acm/contest/887/H给你三个数 A、B、 C, 令 x ∈[ 1, A ],y ∈ [ 1, B ] ,至少符合 x & y > C 和 x ^ y < C 其中的一个条件,问你有多少个符合条件的 (x, y) 。解题思路:首先看他问的至少符合 x & y > C 和 x ^...
2019-08-12 11:42:03
237
原创 不要62 HDU - 2089 (数位dp解法)
题意:题目链接:https://vjudge.net/problem/HDU-2089给你一个区间[ l, r ],让你输出在该区间中满足以下两个条件的数有多少个,条件一:数字的每一位不能出现4,条件二:数字的连续两位不可以是 62 。解题思路:由于这个题目的数据比较弱,预处理下直接输出。假设这个题目的范围变成 : (1 <= l <= R <= 1e18) 就不...
2019-08-09 16:38:56
327
原创 2019牛客暑期多校训练营(第七场) Find the median(权值线段树+离散化)
题意+解题思路:给你一种计算规则,让你计算出 L [ i ] , R [ i ] ,( i 取值是 1 - n )。然后每次增加 L[ i ] - R[ i ] 这些数,然后让你求当前的中位数,如果是偶数个(如 6 个 取第3个)。比如 L[ 1 ] = 5 , R [ 1 ] = 15 . 就会增加 5、6、7 ... ... 13、14、15 这些数。又因为区间大小为 1 - 10^9 ...
2019-08-09 12:05:28
336
原创 2019牛客暑期多校训练营(第七场)A、B、C、D、E
A -String(暴力)题意:链接:https://ac.nowcoder.com/acm/contest/887/A给你一个01串,让你分成尽可能少的段的个数并且保证每个段字典序最小(这里的字典序最小是经过循环后最小,比如 0110 就不满足最小,因为可以经过循环变成 0011 )解题思路:按 01 组合分块,比如: 11001101100100 首先分成: 11 00...
2019-08-09 12:02:16
410
原创 Cutting Sticks UVA - 10003(DP - 四边形不等式优化)
四边形不等式优化:花费用 表示 四边形不等式 : 称其满足凸四边形不等式决策单调性 : 三个定理:定理一: 如果 同时满足四边形不等式 和 决策单调性 ,则 也满足四边形不等式定理二:当定理一的条件满足时,让取最小值的 为,则定理三: 为凸当且仅当 由定理三知 判断 是否为凸即判断 的值随着i的增加是否递减于是求 值的时...
2019-08-05 17:13:18
227
原创 Color Length UVA - 1625 (DP)
题意:链接:https://vjudge.net/problem/UVA-1625给你两个由大写字母组成的序列,让你把这两个序列按这两个序列的原序列的字母顺序拼接成一个新的串,让你输出这个新的串的距离的最小值(这里的距离的最小值的定义是:相同字母的最远距离之和 如: ACACA -> 距离为 4(A与A的最远距离) + 2(C与C的最远距离) = 6 )解题思路:这个dp...
2019-08-05 15:10:06
238
原创 2019牛客暑期多校训练营(第五场)A、B、G、H
A -digits 2题意:链接:https://ac.nowcoder.com/acm/contest/885/A给你一个数 n (1 <= n <= 100) ,让你输出一个数 x ,x 满足两个条件 : 1 . x 是 n 的倍数,2 . x 的每一位数字加起来的和也是 n 的倍数。解题思路:暴力打表到70多就比较满了,所以肯定是构造,怎么构造呢? 首先...
2019-08-02 09:56:16
515
原创 Keen On Everything But Triangle HDU - 6601 (主席树)
题意:题目链接:https://vjudge.net/contest/315593#problem/C给你 n 个数,q 次询问,每次询问一个区间 [l, r],在这个区间里让你找可以构成三角形的最大周长。1 <= n <= 10^5解题思路:首先很容易想到对这 l - r 个数排序,然后从后相邻三个为一组往前找就行,但是询问区间都要排序时间复杂度太高,就可以用主席树来...
2019-07-31 19:19:13
243
原创 Find the answer HDU - 6609 (权值线段树)
题意:链接:https://vjudge.net/contest/315593#problem/GQ组样例,给你 n 个数,和一个上限值 m ,让你求在第 i 个位置时,为了使前 i 个数的和(包括第 i 个数)不超过 m ,问你最少删除第 i 个数之前的几个数(不可以删除第 i 个数)。让你把 i 取 1 - n 时都输出出来。(1<=n<=2*10^5 1<=m&l...
2019-07-31 19:11:08
245
原创 2019牛客暑期多校训练营(第四场)A、C、J、K
A - meeting (树的直径)题意:链接:https://ac.nowcoder.com/acm/contest/884/A给你一颗由 n 个点构成的树,和 k 个不同的点,让你找一点,使得该点到那 k 个点的最大距离最小,输出最小距离。解题思路:两次dfs求出树的直径(注:全都要是那 K 个点的,其他点不算,就是求树的直径的起点和终点都必须是这k个点里的点,因为 题意说...
2019-07-28 10:23:52
339
原创 2019牛客暑期多校训练营(第二场)Second Large Rectangle (单调栈)
单调栈讲解:已经会单调栈的可以直接跳过看2019牛客暑期多校训练营(第二场)Second Large Rectangle单调栈:先来说下单调栈,单调栈按字面意思就是栈,但是里面的值是单调的。举个例子:给你一组序列 : 2 1 4 5 1 3 3 让这组序列进单调栈,步骤:1. st : 22. st : 1 (因为 1 比 2 为了保证单调递增,所以把 2 先出栈,再把 ...
2019-07-25 16:30:45
220
原创 2019牛客暑期多校训练营(第一场)Integration(数学裂项求积分)
题目链接:https://ac.nowcoder.com/acm/contest/881/C解题思路:AC代码:#include<bits/stdc++.h>#define up(i, x, y) for(ll i = x; i <= y; i++)#define down(i, x, y) for(ll i = x; i >= y; i--)...
2019-07-24 14:54:51
237
计算机网络脑图,考研复习、保研复试必用!
2021-08-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅