- 博客(36)
- 收藏
- 关注
原创 Leetcode hot100(day 5)
做法二:递归法,递归要设置出口,所以还是和之前一样,在n==size的时候出去,但这时候因为要选择子序列,所以要有选择和不选择两种递归路线。做法一:迭代法,如果一共有n个元素的集合,那么包括空集,一共有2^n种状态,恰好对应n位2进制的个数,所以我们遍历二进制即可。做法:非优化版本,做一个标记数组,然后搜寻整个图,开始遍历即可,不知道为啥自己写的一直有问题,先不整了。做法:回溯,一共有2*n个括号,左括号<=n,右括号小于左括号,不然无法匹配,按照这个规则匹配即可。做法:非常经典的dfs回溯,刚好练练手。
2025-04-04 20:14:39
307
原创 Leetcode hot 100(day 4)
对于空节点,那么就是贡献度为0,递归的时候,要比较,该节点加左子树和右子树的和是否大于maxum,返回的不是和而是节点值加上max(left,right),因为每个节点至多只出现一次。做法二:空间复杂度O(1),对于一个节点,如果左子节点为空,则不需要操作,如果不为空,那么对于右边,要找到左子树最右的节点,把右节点连接上去,然后再把左子树连到右边即可。做法一:递归,前序遍历第一个节点是根节点,中序遍历则是[左子树,根节点,右子树],我们可以先根据前序定位根节点,然后根据中序才能知道哪些在左边,哪些在右边。
2025-04-03 22:13:04
687
原创 Leetcode hot 100(day 3)
如果哈希映射存在,那么说明random到的节点不会有后续变化了,否则,要创造一个节点,并且继续往下递归。做法一:首先,这种题因为有可能删除头节点,所以必须创建一个哨兵节点指向头节点,并且要记得new之后一定要有delete(释放指针所指向区域的内存),不然运行时间会有差异。fast比slow快n个身位,这样当快指针为nullptr的时候,slow指针就指向要被删除的节点,所以可以把slow指向哨兵节点,这样就能做了。做法一:无脑暴力法,先遍历一遍顺便翻转链表,然后再反着遍历一遍就可以了。
2025-04-02 21:14:51
573
原创 Leetcode hot 100(day 2)
做法:首先 这个数字一定在[1,n+1]之间,因为如果n数组为[1,n],那么就为n+1,否则的话就是[1,n]。如果我们想让整数1被标记已经出现过了,我们没有办法改变数组值,但是可以加上负号,让nums[0]=-abs(nums[0])即可,后面再进行一次循环,只要读到一个负数,那么这个位置就是答案。做法二:还是要利用这个数组,假如存在数字3,那么就和数组nums[3-1]元素交换,直到该位置元素不属于[1,n],要注意要在相等的时候跳出循环。做法二:不开标记数组,直接设置四个指针,然后遍历。
2025-04-01 22:02:52
639
原创 Leetcode hot 100刷题之路(day 1)
想要找到最长子序列,其实就是对每一个数x,查询数组中是否存在 x+1,如果有,再次查询是否有x+2.可以用哈希优化搜寻过程为O(1),但是,外层需要遍历n个数,内层也需要匹配O(n)次,但其中有可以优化的过程,如果x匹配过了 那么x+1就不需要再次判断,因为肯定比x匹配过的短。当右指针指向非零,需要移动,不然会进入零区域,当指向零,不需要操作,只需要指向下一块区域。第一种解法,维护双指针,分别在0,size()-1,维护两个变量,分别是左最高,右最高。这道题用了数组的做法,判断两者的字母数组是否相同。
2025-03-31 17:10:29
924
原创 猛攻大模拟day3!!
没啥好说的 map套。但是很多小细节,还是debug了很久,而且中间还卡在一个地方,因为写出了 cout<<false 但其实要加双引号,不然就是0。偷懒啦嘻嘻 因为一会要健身 所以这题看着别人答案写了一遍,感觉还行,就是要注意逻辑。555 下午一定好好努力。静不下心了 明天看运气吧 长达一个月的CCF-CSP备考 结束啦。这题是真的难啊难啊难。
2025-03-29 19:56:36
183
原创 猛攻大模拟day2!
代码如下 中间卡了一个点,后面发现是next数组得在m不同状态更新。(服了 何必写这个kmp呢)大小写转换还是一个个换吧 没必要用高级函数(其实就是懒得背了)把当前目录 当成栈 如果返回上一级目录 就弹出 如果没有就压入 这样做就好了。哎 又没做出来,其实就是对这些数据得存储还不够熟练,没有提前想好怎么去做。纯粹的kmp算法,让我顺便又复习了一下,然后加上了一个大小写模糊匹配。好题 虽然算大模拟里面简单的题目,但是这道题可以学习到很多的知识。当map中输出不存在键值,会输出空字符串。
2025-03-28 17:44:13
244
原创 猛攻大模拟
下面附上题解 在acwing看了别人的做法 确实想法更好,用set存也更正确,因为可以去重。首先用了滚动数组的想法,因为只能用二维数组来表示不同时间的t值,所以可以模上最大的延误时间+1。感觉这道题加深了我对于多项式的了解,以及如何造出来多项式,可以多看看 来自acwing题解。但是很奇怪 照着y总代码抄了一遍但也是错的,但无伤大雅,现在就拿大模拟当练阅读能力和码力了。写不动了 虽然这题很简单,但是我根本不知道选项能有那么多骚操作参数。附上自己的0分但样例通过代码。六百六十六 我改出来了 但很丑的代码。
2025-03-27 22:05:03
323
原创 CCF算法学习-网络流,最小费用最大流
感觉有点没搞明白,先背着吧,反正也快考试了。模板EK算法 有点自己写不下去了 先放在这。感觉白学了 太复杂了。
2025-03-26 20:24:08
120
原创 CCF算法学习-最短路径树,拆点,差分约束
emmm感觉怪怪的,大概意思就是无向图中,找出一棵树,满足总权值最小的同时,根节点到所有点最短距离不变。先做一个dijstra,然后对于每个点进行遍历,首先肯定要满足dis[a]不变,在这个前提下减小w[边],那其实可以做一个dp 假设遍历到i点,dp[i-1]+w[边]=dis[i].感觉就是要找不等式。我们知道 dp[i]是连接i个节点的最短路径树代价,在dp[i-1]相同的情况下,我们只需要找最短的w[边]然后加入即可。如果是找最大值那么就是Xk<=C0+...,那么就是就是求最小路。
2025-03-26 18:23:04
307
原创 CCF算法学习-欧拉路径
接着进行无向图的欧拉路径/同时要注意无向图存在欧拉路径的判定条件。有向图:当且仅当存在一个点(起点)出度比入度大一,一个点(终点)入度比出度大一。无向图:当且仅当该图所有点度数都为偶数,或者除了两个点为奇数其他点度数为偶数。其实和上面一样,但acwing数据量大 二维数组会爆,所以要用链式存储。有点写不动了,这里链接一下别人的题解。一幅图有欧拉路径,还必须满足把有向边转化为无向边后是连通的。每条边走一次,不要求回到起始点的路径。每条边只走一次,要求回到起始点的路径。无向图:点度数均为偶数。
2025-03-25 21:44:39
254
原创 CCF算法学习-tarjan算法
dfn序列记录进入dfs的时间,low记录当前节点能访问到的最小祖先。要记住 每个节点其实自身就是一个强连通点。所以如果自身dfn==low 就会直接出栈,不算在前面祖先的强连通图里面。因为可能有孤立子图。这道题运用了缩点的知识,把强连通分量看为一个点,只有出度为0才有可能是明星牛,因为如果有出度,又有入度,那么其实就是一个强连通分量。两个出度为0,本题输出0.因为,这出度为0的两个强连通分量,没有办法传递喜欢。把强连通分量缩成一个点。然后进行拓扑排序+dp。
2025-03-25 17:31:21
300
原创 自用ccf
在树上面遍历 并且用vis数组来判断是否删除子树。因为只需要删除子树根(赋值-1),后面再进行一次dfs后,其他节点的vis就都为1,而被删除树是根节点为-1,其他节点为0.然后进入下一循环的时候再判断一下就好了。bellman_ford 不仅可以判断负环 而且也可以算出在有限条边的情况下 最长距离。经典重复覆盖问题 用状态压缩dp做 愤怒的小鸟。模板题 hamilition路径。线段树模板 dfn序加线段树。连续数组之和 线段树做法模板。模板题(滚动数组)炮兵阵地。模板题 蒙德里安的梦想。
2025-03-24 16:06:03
156
原创 树链剖分-ccf算法学习
我们可以按照他dfs2中的顺序(先走重儿子)去建一个DFN序,用这个DFN序去建一个线段树,这时候我们可以想一想,如果x和y在一条重链上,那么直接维护x到y的DFN序的这一段数字,否则的话,想一下刚才我们求LCA是怎么做的,同样我们可以先在他们不属于同一条重链的时候去跳,如果不在一条链上,那我们就先找到头节点深度更大(在树上更往下)的点去维护,(比如说top[x]深度更大我们就先维护top[x]->x的DFN序),然后将x跳到头结点的父节点(fa[top[x]])。dfs序把树状结构变成了线性结构。
2025-03-23 17:41:15
209
原创 ccf算法学习-离散化
注意像 这种题,有的题离散化后会改变题意。例如[1,2] [4,5]本来不是相邻的,都存储到数组后是[1,2,4,5]离散化后为0,1,2,3.假如此时题目往[1,2],[4,5]里面填充id,然后又查询[2,4]里面能不能插入id显然是不行了。所以最好是每次循环存储的时候,对右边的点存储后,再存储一个右边点+1。一定要注意 lower_bound和upper_bound在数组和在set,map中是不一样的。离散化往往都和大数据但数量少以及线段树 树状数组有关系。
2025-03-23 15:44:39
229
原创 ccf算法学习-树形dp
基本思想:dp[0][i]是i往下的最长路 dp[1][i]是i往下的次长路,注意这里虽然是无向图 但其实是当成有向图来存储了,所以必须要有前置条件把。然后dp[2][i]就是i节点往上的最长路。其实也和上面没什么区别 但debug了二十分钟 后面发现 是因为范围不足 因为是存储了两次边 所以节点的含量有些要*2.以及一开始要注意long long。
2025-03-23 10:52:27
127
原创 CCF-CSP 2024 6月
这半个月以来的最后一次真题训练了。接下来将要以复习为主,毕竟还是发现了很多的问题,之后都会以复习之前学过的算法和找相应题练手为主(这份卷子T3难的我难受了 感觉这考试分高除了拥有实力 还得看运气好不好)T1和T2比较简单的背后 是T3的复杂。先理清一下思路 晚上再来看看。感觉这一类题主要还是对数据结构的使用要把握住。用动态规划dp就可以做出来了,当前仓库的状态和上一个仓库挂钩。
2025-03-20 18:26:15
268
原创 CCF-CSP 2024 3月
这题不知道为什么会超时间 并且要注意 数组和vector才可以用lower_bound(vec.begin(),vec.end(),u) map和set必须要 map.lower_bound(u) .dalao的方法是用了优先队列,可能是因为不想进入递归把(我猜的)。这道题要注意 double类型不能直接和0比较相等 必须开1e-6来判断,就是卡在这里,然后加上读题看错了,其他照着题目写就可以了。暴力吧 好方法还是不太行 贴个链接 上课不写代码了。用一个map就可以解决了。开个数组判断一下就好了。
2025-03-19 19:10:27
164
原创 CCF-CSP 2022 -12
难点在于存储z字形矩阵 其他倒是跟着做就好了 ,而且因为数据量比较小,还看到有人直接列举法 用make_pair存储.代码如下。没有看出来是拓扑 但不太影响做题。用拓扑排序的方法做好一点,因为会有多个依赖。顺便复习了一下快速幂的写法。但也还是有点搞不懂 于是采用暴力做法。
2025-03-18 19:29:15
205
原创 CCF-CSP 2023-3
这道题可以用非二分和二分方法做。两种其实思路都差不多,我是用非二分方法做的。二分其实就是在k和mx中判断,到底答案在mid左边还是右边,然后判断资源满不满足让n块田地缩减到mid天。挺有意思得一道模拟题。需要递归进入循环,因为可能有多个括号,并且学习到了bitset得使用,可以直接进行位运算,很方便。线段树加上离散化区间。自己写得时候写了一早上,因为忘记了query得时候pushdown。判断一下和矩阵有没有交集就可以了。
2025-03-17 15:56:18
159
原创 CCF-CSP 2023-5
这题我们要注意时间复杂度的问题。题解解释的就非常好。当然,写的时候出现了一些问题,因为从1开始存矩阵,所以后面乘法的c没有统一好大小,导致越界。在_中找到pin目前指向的字符第一次出现的位置,减去_.begin()就是索引。感觉是目前最迷茫的题目了,暂时还没做出来,参考题解也做不出来。注意一下map和unordered_map区别就行。大模拟,除了ex没有难点,但依然有值得学习的地方。位运算尽量加括号,因为优先级实在太低了。读取两个十六进制字符并且转换为整数。
2025-03-12 18:29:22
144
原创 ccf-csp(2023-9)
并且,这道题由于会更新第i条路的权重,所以存储方式不能用acwing课上的那种方法,必须要再多一层。一开始想法是开个n*m的数组,然后存储位置,感觉这道题不难。然后一开始想的是对应一个pair,但题解的方法是对应一个set<pari<int,int>>,这样就能非常方便的利用upper_bound和lower_bound。总结:大模拟题的能力还是不够,还是要继续刷题,增加思考,以及多向dalao学习。总结:感觉还是刷的题太少了,自己的思想还不够,必须继续刷题。又用了一个下午,但收获了许多知识,gds。
2025-03-10 20:17:02
273
原创 ccf-csp算法学习(2-状态压缩dp)
首先是这里的const int N=1<<n,必须要在输入n之后,再初始化,不然会出现问题。这里的dp数组包括ts,ws数组都是vector动态创建的,然后遍历每一个状态,如果当前状态重量小于桥重量,就可以初始化dp为此时的时间。:是用f[i][j][k]表示当前i行的状态,j表示当前这一行的棋子状态,k表现棋盘目前全部的棋子。因此我们可以建立状态关系f[i][j][k]=f[i-1][x][k-num[j]]。并且我们要注意,一开始对一列状态的初始化也十分重要,dfs过去,对能成立的状态进行存储。
2025-03-09 16:22:56
176
原创 ccf-csp算法学习(1-区间)
构造出原数组得差分数组c,其实这里在acwing基础课中已经学到了,如果对区间[l,r]进行加k的操作,重复m次,时间复杂度达到o(nm),但是用差分数组只需要o(m),最后再进行一次前缀和加o(n)即可求出答案。但在宝藏一题中,dalao的做法是。我们来验证一下 t[1]=a[1],t[2]=a[1]+a[2],t[3]=a[3]....不难看出来 sum[7]=t[7]+t[6]+t[4],而且6=7-lowbit(7)我们在维护一个树状数组t的时候,t[x]=a[x-lowbit(x)+1,x]
2025-03-08 17:11:31
369
原创 ccf-csp复习(2023年)
如果直接去掉的话,m次遍历,那么还要复原,太麻烦了,所以这里采用了一个vis数组,被杀死的点vis赋值-1,遍历的时候权重不考虑进去,但是后面 ,我们还要计算权重w的最小值,那么有一些不在root为根的子树的节点vis不为-1,如何区分有效节点和非有效节点呢,那么就要用dfs的时候vis++,如果最后vis[i]==vis[root]那么就是有效节点。快速幂是利用了二进制的思想,一位位乘太慢了,优化到logn,这样的pow更快,但好像系统有库(一样的,考的时候手写一下不用1分钟),代码如下。
2025-03-08 11:14:18
301
原创 HTMl入门学习
a href="https://baidu.com" target="_blank"> 链接 </a>超链接。<ul>无序列表,每个列表项开始于<li><ol>有序列表,每个列表项开始于<li><h1>标题,从h1到h6逐渐字体变小。<head>标签,不显示在页面主体。<em>强调,字体变为斜体。<strong>字体加粗。其他的之后随着学习更新。<body>页面主体。
2023-07-22 10:07:03
96
2
原创 数据库入门学习(7.17)
反引号是为了避免名字与关键字冲突,这样就可以命名为database而不报错。想要有顺序(descending 降序的 ascending 升序的)2.员工id加名字union客户id加名字 偷个懒截图啦。5.取得薪水最高的员工,最低就是换成MIN。2.取得所有出生在某时间后的女性员工人数。10.constraints 限制。1.取得电话号码尾数是335的客户。1.员工名字 union 客户名字。4.创建表格(首先要选择资料库)1.取得所有部门经理的名字。3.取得所有员工的平均薪水。
2023-07-18 16:03:36
100
1
原创 jlu(2023)数据结构第四次上机
第一题 序列调度有一个N个数的序列A:1,2,……,N。有一个后进先出容器D,容器的容量为C。如果给出一个由1到N组成的序列,那么可否由A使用容器D的插入和删除操作得到。
2023-06-03 22:21:06
147
2
原创 CTF学习日记5.31
来注入多个sql语句,在这里,我看其他wp先用了show database,但不知道这个爆出来有什么用,于是我直接使用 show tables来爆出表单。我们在输入数字1后是有回显的,而且数字表单的字段只有flag一个字段,而words有两个字段,而回显有两个,猜测是words表单的回显,所以在这里我们让系统替我们进行select查询。接下来使用1' 1'or 1=1#进行尝试,发现是单引号,接下来进行字段测试。sql注入需要先判断注入点和注入,直接点击提交,获得如下页面。是预处理语句,会进行编码转换。
2023-05-31 15:21:00
109
1
原创 CTF学习记录5.26
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。另外关于路径,符号"."代表当前目录,“..”代表上一级的目录,"/"代表根目录,而./../../../../ffffllllaaaagggg则通过不断将路径跳转到上一个目录直到flag所在的PHP文件(该题中目标PHP文件恰好在根目录下,而根目录的上一层目录仍然是根目录)。
2023-05-26 19:07:19
203
1
原创 哈夫曼编码译码器
十分常规的写法,接下来就是计算每个字符的哈夫曼编码,一般都是从叶节点从下向上算,我们用一个循环来做,我们知道,树的根节点是不计入计算的,所以,循环终止的条件就是抵达根节点,代码如下。在这里借鉴了一下别人的读取思路,总之就是将读入的字符记录,如果新读入的字符不在原本的字符样本里面,就把这个新加进去,思路还是十分明确的,然后我们要实现计算字符频率的事情,代码如下。接下来我们要实现计算哈夫曼树的构造和编码,相信你已经学过什么是哈夫曼树了,在这里我的程序没有进一步用堆优化,而是直接算出来最小的两个节点,代码如下。
2023-05-24 18:25:38
354
1
原创 jlu(2023)数据结构第三次上机考
在一个有限的正整数序列中,有些数会多次重复出现。请你统计每个数的出现次数,然后按数字在序列中第一次出现的位置顺序输出数及其次数。
2023-05-14 15:56:27
277
1
原创 JLU(2023)第二次数据结构上机考
第一题 图的深度优先搜索I无向图 G 有 n 个顶点和 m 条边。求图G的深度优先搜索树(森林)以及每个顶点的发现时间和完成时间。每个连通分量从编号最小的结点开始搜索,邻接顶点选择顺序遵循边的输入顺序。在搜索过程中,第一次遇到一个结点,称该结点被发现;一个结点的所有邻接结点都搜索完,该结点的搜索被完成。深度优先搜索维护一个时钟,时钟从0开始计数,结点被搜索发现或完成时,时钟计数增1,然后为当前结点盖上时间戳。一个结点被搜索发现和完成的时间戳分别称为该结点的发现时间和完成时间。
2023-05-08 17:57:10
208
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人