自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CSAPP实验记录(2)--------- Bomb

CSAPP实验记录(2)-------------Bomb

2022-11-15 12:44:01 765

原创 CSAPP实验记录(1)--------- DataLab

CSAPP实验记录(1)---------DataLab

2022-11-11 14:11:28 1014

原创 湖南科技大学 -- 密码学课程设计 -- 大整数包

总共三个文件。/* 文件名 Bignum.h*/#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <vector>#include "FFT.h"#include "Vectorcal.h"using namespace std;struct Bignum { int s[2500];

2022-02-24 08:45:29 490

原创 [图论]-------斯坦纳树

斯坦纳树简介斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种。最小生成树是在给定的点集和边中寻求最短网络使所有点连通。而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网络开销最小。-------- 百度百科斯坦纳树问题的最初形式是这样的:给定平面上的一系列点 P1,P2,P3,...,PnP_1,P_2,P_3,...,P_nP1​,P2​,P3​,...,Pn​,现在要想办法用边将这 nnn 个点连通。允许在平面上添加一些新的点(这些点称为“斯坦纳点”)作为辅助,添加的边的端点

2021-04-13 21:48:02 3837

原创 [图论]--------Prufer 序列

Prufer序列简介

2021-04-10 16:11:03 355

原创 [数据结构]--------可持久化线段树(主席树)

前言之前我也会使用主席树,但是都是用别人的模板。我觉得网上的主席树的写法很奇怪已经不是一天两天了,今天我特意写了一种主席树的实现,保留了较多的线段树写法。准备水一篇博客顺便把代码贴上来备用。从现在开始我就有自己的主席树模板了。可持久化权值线段树这是主席树的大名,他是线段树的一种可持久化实现。它维护的是值域,且在对树中信息进行修改时可以保留一份历史版本,在算法竞赛中经常出现。想要保存一个树的历史版本,最简单的办法就是每进行一次修改,就另外新开一棵线段树。但这样会造成时空大爆炸。所以要寻求优化。众所周

2021-04-08 20:37:05 182 1

原创 [字符串]-------[后缀数组]

后缀数组简介在计算机科学里, 后缀数组(英语:suffix array)是一个通过对字符串的所有后缀经过排序后得到的数组。此数据结构被运用于全文索引、数据压缩算法、以及生物信息学。后缀数组被乌迪·曼伯尔与尤金·迈尔斯于1990年提出,作为对后缀树的一种替代,更简单以及节省空间。它们也被Gaston Gonnet 于1987年独立发现,并命名为“PAT数组”。后缀数组(Suffix Array)本质上是对一个字符串的所有后缀进行排序,之后会得到两个信息,分别是:SA[i]SA[i]SA[i],表

2021-04-06 16:54:24 112

原创 [数学]------[多项式]-------快速傅里叶变换(FFT)

快速傅里叶变换简介Fast Fourier TransformFast \ Fourier \ TransformFast Fourier Transform ,简称FFTFFTFFT。这东西似乎在数字通信领域有大用处:(EDA表示很感动)计算量小的显著的优点,使得FFT在信号处理技术领域获得了广泛应用,结合高速硬件就能实现对信号的实时处理。例如,对语音信号的分析和合成,对通信系统中实现全数字化的时分制与频分制(TDM/FDM)的复用转换,在频域对信号滤波以及相

2021-04-05 14:11:34 1524 3

原创 [动态规划]-------树形DP

树形DP,即在树上进行的动态规划,由于树固有的递归性质,因此树形DP往往也递归进行。基础题题目链接:洛谷 P1352 没有上司的舞会.某大学有 nnn 个职员,编号为 1....n1....n1....n。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 rir_iri​,但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可

2021-03-17 21:49:03 137

原创 [图论]------ 一般图最大匹配(带花树算法)

吐槽这两天的训练赛接二连三地出这种又冷门又难的算法。不得不硬刚。。。。本博客默认阅读者对匈牙利算法有一定理解。带花树算法带花树算法,英文: Blossom algorithmBlossom \ algorithmBlossom algorithm,或Edmonds Matching AlgorithmEdmonds \ Matching \ AlgorithmEdmonds Matching Algorithm。是 Jack Edmond

2021-03-13 17:27:22 1596

原创 [数据结构]-------单调栈

单调栈单调栈并非一种新的数据结构,只是栈的一种应用。单调栈中的数据满足单调性,根据要解决问题的不同,栈中数据递增或递减排列都有可能。问题问题一:给定 NNN 个数的数组 AAA,对于每个 iii,找到使 A[j]>A[i]A[j] > A[i]A[j]>A[i],且j>ij>ij>i的最小的 jjj。朴素算法的时间复杂度显然为 O(n2)O(n^2)O(n2),利用单调栈会更优一些。我们需要一个栈底到栈顶,数据依次递减的栈。从后向前扫描,如果当前数字小于栈顶则直

2021-03-09 13:04:26 130

原创 [计算几何]--------最小圆覆盖

最小圆覆盖最小圆覆盖问题,研究的是对于平面中 NNN 个点,求出覆盖所有点的最小圆问题,圆的边界被认为在圆的内部。且该问题经常被推广到 nnn 维空间中,(最小(超)球覆盖)。本文记录一种常见算法:随机增量算法。随机增量算法基于以下三个事实:对于点集 SSS ,最小覆盖圆是唯一的。对于点 PPP 与点集 SSS, 如果点 PPP 不在 SSS 的最小覆盖圆内部,则点 PPP 一定在点集 P∪SP \cup SP∪S 的最小覆盖圆的边界上。三点可以确定一个圆。证明:不会算法流程将要求解

2021-03-07 19:43:42 408

原创 AtCoder Beginner Contest 191

A - Vanishing Pitch略B - Remove It略C - Digital Graffiti一句话题意:求黑色连通块组成的多边形有几条边。挺不错的一道思维题。我们知道,NNN 边形有 NNN 条边,也有 NNN 个顶点,所以计算顶点数和计算边数是等价的。多边形的顶点可以看成多边形的“拐点”,也就是说顶点相连的两条边方向是不同的,棋盘图比较特殊,只有上下左右四个方向,所以如果四个相连的方格中有一个或三个黑色的格子,那么这四个方格的交点就是一个拐点,也就是多边形的顶点。#incl

2021-02-14 19:29:15 216

原创 AtCoder Beginner Contest 190

A - Very Very Primitive Game略B - Magic 3略C - Bowls and Dishes看数据范围发现 KKK 比较小,可以进行搜索。对于每个人尝试将小球加入 Ci 或 Di 。完成一轮搜索后统计个数更新答案即可。#include <cstdio>int N, M, K, A[110], B[110], C[110], D[110], ans;int flag[110];void DFS(int k){ if(k==K+1) { in

2021-02-14 19:28:44 157

原创 [动态规划]-------状压DP

旅行商问题给定一个 NNN 个顶点组成的带权图 G(V,E)G(V, E)G(V,E),要求从顶点 1 出发,经过每个顶点恰好一次后再返回到顶点1,问所经过的边的总权值最小值是多少。旅行商问题(TSP,Traveling Salesman Problem)是一个著名的 NPNPNP难 问题,没有已知的多项式时间的算法,不过我们还是可以通过设计算法来解决规模较小的 TSPTSPTSP 问题。容易想到朴素做法的时间复杂度为 O(n!)O(n!)O(n!) 级别,即遍历路径的所有可能情况。状态压缩动态规划可

2021-02-03 12:06:08 130

原创 [图论]-------最小瓶颈路

最小瓶颈路对于图 G(V,E)G(V, E)G(V,E),结点AAA和BBB的最小瓶颈路指的是,在AAA到BBB的所有路径中,权值最大的一条边权值最小的一条路径,大多数时候只需要求最小瓶颈路上的最长边。先写上结论:最小瓶颈路一定在最小生成树上。这个具体证明我也不是特别清楚,网上的资料很少。不过还是可以通过求最小生成树的过程隐约看出这个结论,Kruskal算法的额执行过程就是把所有边按边权从小到大依次尝试加入到生成树中,这个贪心的过程,决定了最后的生成树中A,BA,BA,B两点之间的路径边权最大的一条边

2021-01-23 17:34:38 585

原创 [数学]------线性基

线性基是什么线性基是一个数的集合。对于数的集合 A ,A的线性基是指,在 A 中选取任意多个数进行异或,得到的结果的值域,和 A 的线性基中数字异或的值域相同。这样对原数组元素的异或运算就可以转化为线性基中元素的异或运算。但线性基中的元素个数比原数组中的元素个数少得多,因此常用来解决一个数组中元素异或值的问题。线性基的构造先来看下面的性质:设集合 A={a1,a2,...,an}A = \{a_1, a_2,...,a_n\}A={a1​,a2​,...,an​},将其中一个元素 aia_iai​

2021-01-21 14:12:55 145

原创 [数据结构]----[线段树]-----线段树常见操作和例题

基本操作,单点修改,区间和: 洛谷P3374 【模板】树状数组 1.区间修改,单点查询: 洛谷P3368 【模板】树状数组 2.区间修改,区间求和: 洛谷P3372 【模板】线段树 1.区间最值:洛谷P1531 I Hate It.洛谷P1816 忠诚.洛谷P2880 [USACO07JAN]Balanced Lineup G.区间布尔值取反:洛谷P3870 [TJOI2009]开关.洛谷P2574 XOR的艺术.区间加,区间乘混合区间加,区间乘,区间求和: 洛谷P3373 【模板】

2020-12-20 19:58:52 305

原创 [数论]-----中国剩余定理(扩展中国剩余定理)

中国剩余定理中国剩余定理用于求形如:{x≡a1 (mod  m1)x≡a2 (mod  m2)⋯⋯x≡ak (mod  mk)\begin{cases}x \equiv a_1\ (mod\ \ m_1)\\x \equiv a_2\ (mod\ \ m_2)\\\cdots\cdots\\x \equiv a_k\ (mod\ \ m_k)\\\end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧​x≡a1​&nb

2020-11-09 21:22:57 1148 2

原创 [数论]-----乘法逆元

乘法逆元介绍如果 ax≡1(modp)a x \equiv 1 (mod p)ax≡1(modp),且 GCD(a,p) = 1,则称 a 的模p意义下的乘法逆元为 x。同时 a 也是 x 模 p 意义下的乘法逆元。a 的逆元记为 a−1a^{-1}a−1乘法逆元的作用首先,除法取模不像乘法取模那样 “自由”:(a / b)%p ≠\neq​= (a%p / b%p)%p,所以如果你想求一个大分式取模,即 a 和 b 都是结果很大的表达式,计算会十分复杂。所以引入了乘法逆元,将除法取模转换为乘法

2020-11-05 22:47:23 202

原创 [图论]------[树形结构]------树的直径

树的直径的定义树的直径定义为树上距离最大的两个点的距离。常见的求法有两种。方法一: 两次DFS两次DFS的求法比较好理解,写在前面。证明一个结论:树上任意一个结点能到达的最远的结点,一定是树的直径的一个端点。设任意结点为 s ,s 能到达的最远节点为 t。他们的距离为 dis[s][t]dis[s][t]dis[s][t]利用反证法,假设树的直径的两个端点为 n1,n2 且(n1!=t且n2!=tn1!=t且n2!=tn1!=t且n2!=t)树上直径为 dis[n1][n2]dis[n1][n2

2020-10-19 11:15:38 248

原创 [图论]------[树形结构]------树的重心

树的重心定义树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。-------百度百科可以类比一下物理上的重心,一个物体本来质量是不均匀的,但是在重心这个质点上就可以把这个物体视为均匀的 (口胡) 那么树的重心可以这样理解:以这个点为根节点,它的多棵子树 “尽可能平衡”。树的重心的性质一下性质摘抄自百度百科。树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有

2020-10-16 11:41:40 842

原创 [字符串]------[序列自动机]

序列自动机一般来说算法竞赛中出现的有关于字符串的 “自动机算法” 都比较高大上,然而 “序列自动机” ----- 一开始我根本没懂这个东西怎么沾上的 “自动机” 的边,但是结合前几天学习 “AC自动机” 有一篇博客中讲的一句话:AC自动机是 “被极端简化了的确定有限状态自动机”,忽然意识到,这个 “序列自动机” 不像自动机的原因 ------ 它被简化到只剩一个数组了。序列自动机可以快速判断若干字符串 s1,s2,…sk 中的每一个,是否是字符串 T 的子序列,还有解决这个问题的一些衍生问题。序列自动

2020-10-14 22:43:06 458

原创 [算法]-----[莫队]

莫队莫队算法是一个可以解决区间中的统计问题的(毒瘤暴力玄学)算法。一个简单的例子:给定一个序列 a1,a2,a3 … an,有 q 个询问,每次询问 [l,r],这个区间里有多少个不同的数字。最简单的办法肯定是定义一个大小为 ai 上限的数组 cnt[i],记录 [l,r] 中 i是否出现了(或者说,出现的次数)。然而这样的算法时间效率过于低下。优化暴力莫队算法正是基于上面的暴力算法,利用询问区间的重叠性来减少运行时间。我们可以考虑两次查询:[l1,r1] 和 [l2,r2],假设 l1 <

2020-09-25 11:29:32 154

原创 [数论]-----欧拉筛法的应用

欧拉筛法众所周知欧拉筛法一般用于在线性时间内筛选出 1~n 范围内的质数,但是在数论问题中欧拉筛法的用途不仅仅是筛素数,它还可以干其他三件事,只不过这些问题被提及的次数比较少。欧拉筛法可以干哪些事呢?求 1~n 之间所有质数求 1~n 之间所有自然数的欧拉函数 φ(x)求 1~n 之间每个数的因子个数求 1~n 之间每个数的因数和筛质数这个大家应该很熟悉了,这里就写一个关键点吧。欧拉筛法核心思想:每个合数只被自己的最小质因子筛一次。对 i%prime[j]==0 时即跳出循环的解释:

2020-09-17 23:27:06 591 1

原创 [图论]-----[网络流]-----最小割的可行边与必须边

最小割的可行边和必须边我们知道一个流量网络,可能会有很多种最大流方案,这些不同的方案中,最小割的割边集也是不同的。在有些问题中,可能需要确定最小割的可行边与必须边。如果存在某个最大流方案,使得边 E(u,v) 被割断,那么 E 就是一条最小割可行边。如果对于每个最大流方案,都有边 E(u,v) 被割断,那么 E 就是最小割必须边。可行边E(u,v) 为可行边的充要条件:边 E(u,v) 满流在残量网络中,不存在 u 到 v 的路径。求法:在残量网络上用 Tarjan 算法求 SCC,如果

2020-09-12 23:38:46 433

原创 [图论]---[二分图]---DAG最小路径点覆盖

DAG最小路径点覆盖的定义

2020-08-19 21:09:27 305

原创 [图论]---[网络流]---最小点割数/最小点割集

概念

2020-08-19 19:10:53 1451 2

原创 [图论]---[网络流]---最大权闭合子图

最大权闭合子图闭合图的概念闭合图建立在有向图之上,对于 G = (V, E) 选取一个点的子集 V ’ ,V ’ 的任意一点的所有能到达的点也在集合 V ’ 内,则称 V ’ 为闭合子图。最大权闭合子图即在G的所有闭合子图中,点权和最大的。最大权闭合子图的求法构建流量网络,将源点S与所有权值为正的点连一条边,容量为其权值;将权值为负的点向汇点 T 连一条容量为其点权绝对值的边。原图中的边保留,容量设为INF。上图所构建出的网络流图如下:结论结论:最小割所产生的两个集合中,源点S所在集合

2020-08-19 12:26:59 553 1

原创 图论---最近公共祖先(LCA)

最近公共祖先(Least Common Ancestors,LCA)问题:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。

2020-07-11 23:01:25 1294 1

原创 数据结构---Sparse Table 稀疏表

Sparse Table(ST表)ST表是解决 RMQ (Range Minimum/Maximum Query) 静态区间最值查询问题的离线数据结构。其预处理时间复杂度为 O(nlogn) ,查询时间复杂度为 O(1),n为序列长度。RMQ 问题也可以用线段树来解决,只不过线段树的查询复杂度为 O(nlogn) 而且代码量大。本文以求最小值为例。算法算法利用了二分和动态规划的思想:设 st[i][j] 表示区间 [i,i+2^j-1] 内的最小值。例:对于序列 3,2,4,5,6,8,1,

2020-07-10 22:41:00 385

原创 图论---割点,割边与双连通分量

割点和割边割点与割边是在无向图中讨论的问题。割点,即删除某个顶点,原图不再连通,这样的顶点称为割点。有时候也叫 “割顶”。割边是与割点性质类似的边(有时候叫做 “桥”)。求割点和割边同样利用Tarjan算法的 dfn[ ]数组和 low[ ]数组。注意由于不同于求强连通分量,割点和割边是无向图上的问题,因此 low[ ] 数组的含义有细微变化,见后文。Tarjan算法求割点在Tarjan算法求强连通分量的过程中,讨论了 dfn[i] = low[i] 的情况,这意味着结点 i 不能通过其子孙结点回

2020-07-08 18:56:25 776

原创 图论---强连通分量与缩点---Tarjan算法

强连通分量在有向图G中,如果每一个点对 (ui,vi),都既存在从 ui 到 vi 的路径,也存在从 vi 到 ui 的路径,则图G成为强连通图,强连通分量定义为有向图中的极大强连通子图。容易证明,强连通分量是对有向图点集的一种划分。强连通分量的求法对于一个有向图G,想求出G有多少强连通分量,以及每个强连通分量包含哪些顶点,一般我们采用Tarjan算法。(实际还有一种叫Kosaraju的算法,但因为它的时间复杂度常数大,因此没有Tarjan优秀)。两个重要属性由于执行Tarjan算法的需要,我们

2020-07-08 14:18:56 556

原创 图论--AOV网与拓扑排序

AOV网AOV网,英文(Activity On Vertex Network),是一种用顶点表示活动,有向边表示活动的先后关系的有向无环图。例如:某些课程,是一些课程学习的先决条件,”课程学习“ 这个活动构成严格偏序。很明显AOV网中不应该有环,因为这样意味着一个活动进行的先决条件是自己,这样就出现了矛盾。在有向无环图中,只有出边,没有入边(即入度为0 出度不为0)的顶点叫源点,只有入边,没有出边的点叫 汇点,容易证明有向无环图中一定存在源点和汇点,一会儿会用到这两个概念。拓扑排序对一个有向无环

2020-06-13 18:04:56 531

原创 数据结构--平衡树--普通平衡树

普通平衡树一般说“普通平衡树”, 应该指的就是最早发明的平衡二叉树 “AVL树”。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文《An algorithm for the organization of information》中发表了它。为什么发明了平衡树当我们用二叉树维护信息的时候,要进行插入/删除操作。例如下面的一棵二叉树。二叉树体现了一种二分的思想,因此查找信息的期望复杂度在 log级。但是二叉树的形态受操作顺序的影响,例

2020-06-12 20:35:01 397

原创 [图论]------[生成树]-------[最小生成树]

最小生成树我们知道,有n个结点,n-1条边的连通图是一棵树,也就是说想连通n个结点,至少需要n-1条边。在实际问题中可能每条边的 “费用”不一样,这样我们想用最小的 “花费”,连接这n个顶点,这是最小生成树研究的问题。Prim算法在学习Prim算法之前,最好能了解Dijkstra算法,在我另一篇博客里,因为二者的贪心思想非常相似,如果能理解Dijkstra,学习Prim会非常容易。正题:解释Prim算法,我准备用和Dijkstra算法一样的 “蓝白点” 思想,只不过蓝点和白点和含义变了:白点表示已

2020-06-11 16:19:17 228

原创 数据结构--并查集

并查集并查集是一种树型数据结构,用于解决不相交集合的合并和查询问题。具体的例子:假设 “朋友” 这个关系满足如下性质:如果 a 和 b 是朋友,那么b 和 a 是朋友。如果 a 和 b 是朋友,b 和 c 是朋友,那么a 和 c 是朋友。一个人和他的所有朋友称为一个 “集体”。现在给出m对朋友关系 (u, v) 表示u 和 v 是朋友,问:给定两个人a 和 b 求他们是否是朋友。一共有多少个 “集体”。...

2020-06-10 21:14:23 163

原创 图论--最短路径--Floyed算法,Dijkstra算法

最短路径算法给定一个有向图或无向图 G(V,E) 有时我们需要求某个结点到其他所有结点的最短路径的长度,有时需要求出任意两个结点的最短路径。(如果是指定的两个结点间的最短路径可以直接暴搜,思维难度较低)。求某个结点到其他所有结点的最短路径的长度的算法,叫单源最短路径算法,后者叫全源最短路径算法。全源最短路径–Floyed算法设图 G(V,E)(有向无向都无所谓,Floyed算法不关心,下面Dijkstra同)用邻接矩阵来保存。设dis[i][j] 为结点 i 与结点 j 之间的距离,如果i与j之间

2020-06-10 12:39:45 464

原创 CTF之密码学之RSA

学密码学的感受就一个字 肝RSA概述RSA是一种基于大整数因数分解目前没有有效方法的一种,非对称加密算法。 它通常是先生成一对RSA 密钥,其中之一是保密密钥,另一个为公开密钥,一般长度为1024位。一些重要保密场合为2048位。RSA算法是第一个能同时用于加密和数字签名的算法。好了,游戏到此为止,下面进入激动人心的理论环节。RSA加密流程随机生成两个质数记为p 和q。并且计算出 N = p*q。我们知道RSA算法基于大整数的分解。也就是说p和q越大。加密后的信息被破解的难度越大。

2020-06-07 10:04:09 675

空空如也

空空如也

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

TA关注的人

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