自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Hello,hackers(pwn0x0)

好久没有写Blog了,正好最近来了兴致。就要开学季了,又要忙喽~也不知道下一篇啥时候。这篇就送给有缘人好了。希望大家可以学到一些东西。

2024-08-21 00:58:35 736

原创 基于大整形的运算收录

简单记录了大整形各个运算的实现

2024-01-22 14:05:16 496

原创 RSA:基于小加密指数的攻击方式与思维技巧

最近,发现自己做题思路比较混乱。总的来说,就是在各种方法之间很难适配到对应的题目。所以,写下这篇博客来记录这些区别。特别说明的是,这篇文章更偏向于解题,而不是讲解原理。考虑到两个点,在写下这篇博客时本人其实也才学习了近1个月的密码学,数学知识严重匮乏,不敢乱教与解析原理。其次,备战省赛在即没有充分多的时间让我去了解学习深层次的原理。所以这里只能够给出使用条件,也就是应用层面上的区分。此外特别声明,该篇博客更多的偏向于个人学习使用,其次是帮助大家应用。再者也欢迎各位指出错误,与提出问题。

2023-10-28 23:06:06 1586

原创 NewStarCTF 2023 公开赛道 WEEK2|Crypto

获取一组发现难以解密,所以考虑靶机特性,因为是对同一个明文加密,所以我们。但是看到题目只解一半,也就说m > q,即k4 < 0, 所以h就是我们要求取的系数。因此可以使用广播攻击(见题,如果关注到题目含义就能很快反应,笔者是崩溃的过程中提出为什么给我这么恶心的靶机才意识到的)。根据加密过程,我们知道这里应该采取费马费解法,所以我们可以把n丢到yafu中去,可以获取得到两个因子。好好分析还是挺简单的,因为只需要搞清楚h是什么就可以了。知道(p,q)后,我们就可以破解RSA了。,我们提取出(p-1)。

2023-10-11 19:59:42 1680

原创 RSA攻击:Smooth攻击

本文记录Pollard's p-1 Algorithm以及Williams's p+1 Algorithm的一些理解、灵感、原理

2023-10-09 09:34:24 1133

原创 RSA攻击:模数分解

在这里,涵盖了大部分的模数分解法的题目做法。我们分析了如何判断以及尝试的优先级。如何根据代码报错,进行实时的调整、排错。

2023-10-04 18:35:06 1493

原创 算法竞赛入门 -- 括号画家

面对这道难题,我们应该知道当匹配发生时,如果栈不为空,我们不应该直接让 tmp_res += 2。而是单独计算此时的括号序列长度。所以我们需要知道下标信息。但是,下标信息又可以告诉我们字符信息。所以,我们空间就可以减少。都运用到了缓式评估的思想。此时,这种思想就成了BUG的来源,因为它会连接本该断开的括号序列。从更加一般的角度来说,这道题属于 “栈” 结构处理的。,上述代码会返回 6。但是,这样的代码段存在BUG。所以,我们能够很快反应到需要。这样的BUG来自于上述代码段的。,注意 “栈” 在处理问题时,

2023-09-16 15:00:53 156

原创 Leetcode 2594.修车的最少时间

给你一个整数数组ranks,表示一些机械工的。ranksi是第i位机械工的能力值。能力值为r的机械工可以在r * n2分钟内修好n辆车。同时给你一个整数cars,表示总共需要修理的汽车数目。请你返回修理所有汽车需要多少时间。所有机械工可以同时修理汽车。16- 第一位机械工修 2 辆车,需要 4 * 2 * 2 = 16 分钟。- 第二位机械工修 2 辆车,需要 2 * 2 * 2 = 8 分钟。- 第三位机械工修 2 辆车,需要 3 * 2 * 2 = 12 分钟。

2023-09-07 21:34:17 153

原创 浅谈BFS使用与设计

在阅读本文时,默认读者对BFS算法,宽度优先搜索算法,有所了解以及理解。BFS算法的思路,代码实现本文不给出。还望海涵,本文的创作是源于一些进阶的BFS使用。后续还会有所更新。闲言少叙,书归正传。让我们进入正题!

2023-09-06 19:45:16 500

原创 LeetCode 1921. 消灭怪物最大数量(贪心 + 排序)

那么这道题很见到存在最优子结构,如果我们在最短时间内消灭的最大怪物数量为n,且第 i 只怪物抵达时间分别为times[i]中,我们会发现优先消灭 min{times[i]} 的怪物最好。决策的包容性意味着:我们在 cur_time ~ cur_time + 1 的时间内,我们将击杀怪物数从 n -> n + 1,我们可以击杀任何一只怪物,但是我们击杀怪物后剩余的容错时间有所不一样。如果存在,优先考虑贪心!从长久积累的经验来说,我们应该尽快消灭最早抵达城市的怪物,这样子我们才能够尽可能多的消灭怪兽。

2023-09-03 22:47:09 205

原创 Leetcode 1782. 统计点对数目

按照最基础的情况,我们为每一次的查询都进行O(N^2)的遍历就好了。也就是说,如果我们知道 frequency(degree(a)) 和 frequency(degree(b)),那么我们之就能直接计算出符合条件的式子个数。而剔除操作就是将 degree(a) + degree(b) - cnt(a, b) 的个数+1,而对应的 degree(a) + degree(b) 个数 - 1。,我们知道 incident(a, b) = degree(a) + degree(b) - degree(a, b)。

2023-08-23 04:07:56 152

原创 POJ-2054 Color a Tree

Bob对树十分感兴趣。树是一种有向图,其中有一个特殊的节点被称为树的“根”。并且“根”与任意节点之间的可达路径是唯一的。Bob想要给树的所有节点进行上色。一颗树拥有N个节点,这些节点编号为1,2,....,N。假设Bob为一个节点上色需要1个单元时间,并且Bob上色的操作是逐个进行的,完成一个节点的上色后,可以为另一个节点上色。,每一个节点被上色之前,其父节点已被上色。显而易见的,Bob的一次尝试有且只能对“根”节点进行操作。每一个节点拥。“上色成本”依赖于编号i个节点的权值和其完成的时间。

2023-08-23 01:11:09 291

原创 Leetcode 2337. 移动片段获得字符串

这里我们知道一个点。以示例1为例子,我们知道应该是“R”字符应该是按照顺序匹配的。但是,我们率先扫描到是左边的“R”。而在移动中间的字符时,我们“R”是收到影响的。基于此,如果我们提出非占位符“_”后,两个字符串序列应该一致。但是,"_"的位置对于我们的答案有所影响,所以我们不能真正的完全无视它。关注到“L”的匹配优先匹配左边,“R”的匹配优先匹配右边。根据题目“L”只能向左移动,“R”只能向右移动。值得注意的是“L”和“R”为占位符,即不可互穿过。为了方便说明,我们将start中的R做出标记以示区别。

2023-08-21 01:45:59 147

原创 Leetcode. 3n 块披萨

如果 [1, i-1] 范围的PIZZA 不选去那么就代表的是在 [i, r] 区间内选 k 个PIZZA。首先,面对我们环形结构的第一个策略就是无视防御,先思考它为链形结构的状态。也就是我们的目标是覆盖区间 [1, N], 而我们每一次的状态是[l, r]。在状态的择取上,我们往往选择最小的覆盖集合。我们发现我们只关注从[1, r]的区间,所以我们可以固定l = 1。这很容易理解,如果第 r 块PIZZA不选去,那么 dp[l][r][k-1] 就是 dp[l][r-1][k-1]。

2023-08-18 15:20:20 158

原创 区间DP讲义

所以,我们可以给出 动规数组 d[i][j][k]表示将 [i, j] 分成 k 段的代价。

2023-08-10 15:32:23 226

原创 Leetcode 1289.下降路径最小和II

基于此,我们可以撤销遍历k的循环,从而使用 first_sum,first_pos,second_sum来代替。注意第2小的位置我们无需关心,因为一定不会跟第1小的位置相同。至此我们发现,我们需要一层循环遍历 j,一层循环遍历 k,还需要一次循环遍历 i。接下来,我们经行优化。在遍历寻找的最小位置的时候,我们发现:如果第 i-1 行的最小值位置为 pos,接下来,因为我们的起点是不固定的,而终点是固定可知的。所以,我们的解决算法关注到 “动态规划”。因为我们需要返回最小路径和,那么我们的。

2023-08-10 09:43:20 170

原创 Leetcode 1749. 任意子数组和的最大绝对值

那么我们为了保证连续区间的特点需要对跨区情况需要花费O(n)的时间去维护最大绝对值。最后我们只需要访问整个区间即可,也就是最后复杂度会来到O(nlogn)。当然,如果你是采用记忆化搜索的,时间复杂度可以来到O(n)。本质上来讲,树状数据也是一种前缀和数组且是线段树的优化。关键在于最大绝对值的维护,我们的第一个想法就是某一段区间内的和最大或者最小。但从关键字 “区间” 而言,我们有 前缀和数组、树状数组、 线段树以及区间动规。) ,面对 题目的数据量这样的代价是高昂的。所以,我们需要另寻他法。

2023-08-08 10:32:03 297

原创 背包DP全讲

背包问题全面汇总、朴素解法以及优化解法。

2023-08-07 18:44:25 586

原创 经典题:编辑距离

通过上述的分析,我们也得知了如果要获取 dp[i][j] 则需要知道 dp[i-1][j], dp[i][j-1], dp[i-1][j-1] 三个状态值。从各大OJ平台对其的收录,我们可以知道这道题是多么的经典。首先,删除操作跟插入操作一样,是可以在任何情况执行的。注:#表示空字符串,2表示我们在计算的,1表示我们需要获取的。的最小操作次数,而这是我们可以知道的。

2023-08-05 09:58:11 268

原创 Leetcode 980.不同路径III

你想得没错,这道题leetcode的数据不是很强...在 0

2023-08-04 12:03:39 132

原创 LCR 051.二叉树中最大路径和

根据题目意思,一条路径序列中的节点仅出现一次也就表明这条路线是单一的,不会出现交汇的情况。那么我们不妨考虑简单情况,因为此时我们面对处理树的手段还有DFS。我们可以通过DFS来缩小问题规模。这道题是一道路径规划题。如果,我们将其视作图。从枚举的角度上来说 弗洛伊德算法 将是很好的一种解决手段。但是,我们的树中节点的规模告诉我们,这是痴心妄想的。3. 链接左右子树,也意味着路径规划结束,不可能在上传。最终的答案,就在这三种情况中诞生。1. 向左子树延申,可上传。2. 向右子树延申,可上传。

2023-08-03 18:56:47 173

原创 leetcode--2681.英雄的力量解析

同理,蓝色组 = (绿色组_min_sum + 黄色组_min_sum + 4)* 16 = (3 + 1 + 4)* 16 = 128;我们知道 [1, 2, 4] 的答案与 [2, 1, 4] 是等价的,因为它们的子序列是完全一致的。同时 [1, 2, 4] 也跟方面我们的表达式计算,因为我们花费更小的力气去寻找最大最小值。那么 preSum[i + 1] = preSum[i] + dp[i];第七组:[1, 2, 4] = 16;第六组:[2, 4] = 32;第三组:[1, 2] = 4;

2023-08-03 16:35:46 168

原创 leetcode--882.反转卡片游戏

表示前 i 张卡片的最小背面值。当我们加入第 i + 1 张卡片时,我们不妨先观察会产生几种结果,并分析产生条件。因为计算机的离散化处理方式,且具体到题目,本道题是最优化过程。所以我们可以尝试使用动态规划的思路。即寻找最优子结构来解题。基于这个事实,我们可以分析出,如果第 i + 1 张无论是正反面的值。基于这个分析,我们就可以免除记录前面牌面的状态记录。我们可以看到对于上面三个结果以及条件中,我们其实。因为对于其他结果翻转是不需要的/无用的。小,那么它在次之前不可能出现。根据题目意思,我们可以得知。

2023-08-03 15:53:58 170

原创 leetcode--772.删除注释

正是因为这种 “先进先出” 的关系,导致只要不出现这种匹配关系,那么字符就不会被抛弃,意味着该字符最终会被先行输入输出数组中。但是还需要几个细节需要处理,如果我们遇见了 "/*" , 那么这种情况是可以跨行存在的。如果栈的大小不为0,就说明还有 "/*" 没被中和,所以不输出的状态应该被保持。所以,在思考这道题的时候,我采用“栈”的思路。但是,有所不同的是每一行代码后面自带 "\n" ,所以我们应该是遇到 "//" 就执行抛出操作。遇到 ‘*’ 也是相同的,我们无法判断它的操作含义,它可能是。

2023-08-03 08:26:46 216

原创 经典题:Fibonacci数列精讲

Fibonacci数列是一个比较经典的算法题。在这里我个人收录的大部分算法。

2023-08-02 19:28:05 501

原创 记忆化搜索

在我们求解 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 时,我们很容易获取到了答案是8,但是如果我们说在上述计算式上再 + 1,那么我们也可以很快回答出答案是9。在求解动态规划的问题时,记忆化搜索与递推的代码,在形式上是高度类似的。这道题我们从人类的贪婪角度,我们自然希望是"低价买入,高价卖出"了。事实上在 n > 1 时,我们的合并操作 O(N) 的时间可以通过记忆化去消除成为 O(1) 的时间。确切地说,此时我们的递推应该被称之为动态规划,再细致一下是背包DP中的一般的背包问题。

2023-08-02 13:11:29 54

原创 Leetcode 2050. 并行课程III

本文默认读者拥有基础的图论知识,或者图的基础算法。同时,读者掌握C++基础语法。

2023-07-28 00:52:57 83 1

原创 动态规划基础讲义

本专栏将介绍动态规划(Dynamic Programming, DP)及其解决的问题。动态规划是一种通过把原问题求解复杂问题的方法。由于动态规划并不是某种具体的算法,,因此它会出现在各式各样的数据结构中,与之相关的题目种类也更为繁杂。在 OI 中,计数等非最优化问题的递推解法也常被不规范地称作 DP,因此本专栏将它们一并列出。事实上,动态规划与其它类型的递推的确有很多相似之处,学习时可以注意它们之间的异同。

2023-07-27 13:42:04 238 1

原创 Leetcode--2569. 更新数组后求和查询(浅谈对线段树相关理解)

讲解完我们的前置知识,我们先来浅谈一下线段树和树状数组。树状数组擅长处理前缀,而线段树擅长处理区间。而值得一提的是,我们可以使用presum[i] - presum[j]来求取[i, j]的区间和。所以,在一般情况下树状数组也擅长处理区间。那么,我们不禁发问!树状数组就一定何时何地都比线段树优秀吗?答案是否定的,树状数组的优秀有一个前提条件:对一个值进行更迭。但是,如果我们需要对区间内的多个值进行更迭。那么树状数组就需要一个个的遍历更新,而每次更新需要O(logN)的时间。

2023-07-26 04:21:41 117 1

原创 最短路径应用问题--深入理解最短路径算法

1.最短路算法的数学原理是差分约束系统。2.我们每一种算法都有与之匹配的数据结构,我们可以从数据结构的确定来选择恰当的算法。3.DAG(无环有向图)可以用动态规划解决--最短路算法。

2023-07-24 06:37:05 358

原创 满足不等式的最大值

根据问题简化示意图,如果要枚举,那么我们要枚举各个区间的左端点,再者确定区间范围。每一层的复杂度大致在O(n),所以最后的枚举算法复杂度在O(n^2)。其中0

2023-07-21 18:45:25 339 1

原创 leetcode--918:环形子数组最大和

那么我们要处理的跨界情况值就是nums[0: i] + nums[j: n]。而我们的跨界最大值为。但是,在链表区间上,我们想要枚举清楚,就必要将循环链表断成n条单向链表(数组);所以我们只需要在nums[0]为首元素的时候,记录不跨界最大值,和不跨界最小值就可以了以及总值。所以我们可以设计状态数组dp[n] 表示从["左端点", i]区间中最大的序列和。ps:每一次的状态转移关系是,固定区间左端点(一个端点)后,状态改变是简单的。再次看到这道题目,我们发现如果在求和操作中,每一次的状态转移关系是简单的。

2023-07-20 04:18:54 510 1

原创 动态规划例题解析

动态规划什么时候用?怎么用?这里有快速判断的方式方法,弱相关,记录状态,不同角度设计转移方程,优化转移方程。一气呵成,这是一份简单的入门指引

2023-07-17 21:27:23 449 1

原创 过桥的时间(leetcode -- 2532)

通过leetcode--2532加深计算机对并行,状态纠缠的处理方式/方案。

2023-07-07 17:34:29 169 1

原创 经典题:最大子序列和

对经典算法题:最大序列和的深入探讨。分治递归,规划递推,复杂度分析,优化思路这里应有尽有。

2023-07-06 02:15:41 165 1

原创 Millionaire(百万赢家)

拿到这道题的时候,笔者觉得有一个难点。!所以我们有基于此,我们需要思考如何将问题离散化。从简单简单开始思考如何离散化。以m=1(参与一轮押注)为一个例子。如果我们手头的钱,那么就算我们赢得胜利,我们也不能达到目标,所以我们的如果我们手头的钱;那么我们不妨全压上!因为赢了我们拿一百万回家,输了就是还给节目组。所以如果我们手头的钱,我们就不需要参加之后的押注,或者押注为0.因为这样子我们一定能拿到1000000。所以所以我们可以得到下面的示意图:!那么我们至少需要250000。所以当钱。

2023-06-26 21:29:05 152 1

原创 模式串匹配

模式串匹配方式方法

2023-06-12 20:12:12 67 1

原创 构造/析构函数那些事儿

原因不在于B,而在于A;如果我们在进入B时就应该创建好类A,那么问题就好理解了。此时我们是没有办法传入参数供编译器创建A类对象的,这也就意味着。

2023-05-10 22:49:06 91

原创 下一个排列(next_permutation)

而关键是。

2023-05-10 17:27:18 3761 2

原创 表达式计算

但是仔细一想,这道题难度不小,问题出现在运算的次序上,符号的解析上。我们知道从左向右关注,也就是从右向左运算,我们需要找到最右边的最低运算符。在我们的认知中,对于 a + b,我们最关注的是什么,或者说我们最先关注的是什么?很明显是运算符号‘+’;因为我们需要找到最小值,诶赋值成“无穷大”就不错,我们思考以下数字的优先级,显然,数字的优先级(我们的关注点要低)要大,故此‘无穷大’可行。这恰巧也是我们需要关注的信息之一,于是我们能反应到本身的优先级还不够用,需要一个额外的优先级来反应‘()’的影响。

2023-05-05 01:15:20 280

空空如也

空空如也

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

TA关注的人

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