自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单调队列例题

规则就是:如果当前元素大于队尾,直接入队,否则弹出队尾元素继续比较当前元素和队尾元素,直到当前元素大于队尾元素或者队列空,入队当前元素。这里要注意进入队列的并不是实际的7,8,1,4,3,2,而是他们的索引,因为通过索引可以得到对于的数,所以接下来的模拟就用7,8,1,4,3,2。单调队列模板题,单调队列就是一个数据结构,可以维持队列中元素的单调性,一般用于求一段固定长区间里的最大(单调减)最小(单调增)值。然后扫描到1,1小于8,弹出8,继续和队尾7比较,1小于7,弹出7,队空,入队1。

2024-10-13 17:29:08 233

原创 单调栈例题

题目搞得很深奥,其实就是给我们一个数组,让我们求数组中(假设定义为num数组)每个元素右边第一个比它大的元素的下标,我们可以把答案保存再一个新的数组res中,res[i]表示num数组中第i个元素右边第一个比它大的元素的下标。那res的数组怎么记录呢(别忘了res数组的含义),我们知道2的右边第一个比他大的元素就是3,但是我们不知道2在num中的索引,那怎么给res数组相应索引的位置赋值呢,(好好理解一下这里)所以,我们实际入栈的,不是。1)求右边第一个比它大的元素:从左往右扫描,维持栈的单调递减。

2024-10-13 17:03:16 357

原创 Verilog实现四位有符号比较器

如果可以使用<和>就好了,直接把输入A和B设定为有符号类型,然后比较大小就完事了,但是由于不能使用这两者,所以只能一位一位比了。先比较最高位,如果最高位不同,进行利用与运算(具体实现请看代码)判断谁是正数谁是负数,就可以比较出大小了。否则继续比较下一位(这时的首位已经相同了),首先判断这一位是否不相同。当然,比较这一位的时候要看是正数还是负数,如果是正数的话,当然是这一位是1的那个数比是0的那个数要大;如果是负数其实还是是1的那个数更大(具体请了解补码的知识),以此类推。如果所有位都相同,说明两者相等。

2024-10-11 19:00:58 150

原创 verilog状态机题的多种写法

题目中最最最关键的一句话就是:每个时钟上升沿,状态机从coin中读入一个2位的二进制数字。需要在此时判断顾客是否可以获得饮料,以及售货机是否应当退还相应的钱。说明在投入的总钱数钱上加上当前投入的钱大于大于2元时,就要把drink置1,并且back返回找0值。有点像米勒状态机,因为相当于是在输入改变的时候输出改变。本人一开始就是因为没有仔细看题目,错误想法如下:sum记录总钱数,当sum大于等于两元时,才把drink置1,才去计算back。呜呜.......。

2024-10-10 21:51:08 1137

原创 忽略Verilog顺序和并行可能导致的延迟赋值错误

也可以采取利用二进制数直接根据公式转为对应的格雷码,格雷码的最高位就是对应二进制的最高位,格雷码除了最高位的其他位都是对应二进制的这一位和上一位的异或,比如求二进制数110对应的格雷码,最高位和110一样是1,次高位是二进制数的次高位和最高位的异或(1^1=0),最低位是二进制数最低位和次高位的异或(1^0=1),所以格雷码是101。1、在always块与块之间是并行的,always块与initial块之间是并行的。2、always块如果是用非阻塞(<=)是并行的;这道题最好的方法是用标准的状态机写法。

2024-10-06 20:58:02 435

原创 动态规划浅谈2——交替数列问题

第i个数字的最长交替子序列长度。特别注意一开始必须给dp数组最后元素赋初值1(甚至可以全部赋值为1),因为如果最后一个元素的最长交替子序列就是它本身,即1(这一步很关键,在这里最后一个元素是动态规划的起点),然后从倒数第二个元素开始计算每个元素的最长交替子序列。假设我们知道数组的第k个数字的最大交替序列,那么只需要比较第k-1个数字和第k个数字是否符号相反就可以算出第k-1个数字的最长交替子序列,如果相反就是第k个数字的最长交替子序列+1,否则就是1.

2024-10-05 21:11:11 290

原创 2024北航计组P0

1.设计四位模二除法器:模块中输入四位被除数和四位除数,输出是三位余数。如果被除数的最高位是0结果就输出被除数本身,否则输出被除数和除数按位异或之后的结果(模二除法余数),这里可以通过最高位和mux来选择结果。按位异或就是用分线器将被除数和除数分开,搞三个异或门就行,被除数和除数的最高位不需要异或,因为如果要进行按位异或,最高位一定是1^1=0,而且结果中的余数本身就是后面三位按位异或的结果(我这该死的表达,感觉没讲清楚,劳烦大家仔细体会2.搭建CRC。

2024-09-26 20:52:21 691

原创 lake counting(dfs版)——最大连通块问题

不同与一般的dfs本题是求最大连通块(而不是路径之类的),因此标记之后不需要回溯,请看代码:另外,dfs的一般模板:洛谷P1238 走迷宫(dfs)这个代码在求最大连通块时非常好用,大家可以收藏起来以备不时之需

2024-09-15 13:12:40 139

原创 洛谷P1238 走迷宫(dfs)

其中pop_back必须要在遍历完所有子节点之后进行,可能有人会有疑问,不是应该每次搜索完子节点之后马上回溯吗(。是不是搜到的子节点是终点或者不合法,dfs才会进行回溯,当搜到终点时,终点压根没入栈,如果这个时候pop_back(),会导致弹出上一层节点,不合法的同理。其中回溯非常细节,大家先看代码,主要的函数有三个第一个是check函数,用于检测新的节点是否合法(包括是否越界,是否已经走过,是否能走),第二个printPath函数,用于在到达终点打印路径,第三个就是dfs函数,用于搜索所有可能的路径。

2024-09-15 12:57:45 309

原创 动态规划浅淡1(C语言)

因为dfs会递归探索从起点到终点的每一条可能路径,在最坏的情况下(没有障碍物且每次都能向下或向右移动),搜索的路径数量是指数级别的,即最多有 2^(m+n) 条路径。我们现在想求得到达坐标(i,j)的路径总数,因为机器人只能从上方的格子或者左边的格子来,因此到坐标(i,j)的路径总数应该是到达(i-1,j)和(i,j-1)的路径之和。因此,我们可以定义一个二维数组dp[][],dp[i][j]表示的就是到达坐标(i,j)的路径总数,有递推公式。为了简化代码,可以舍去数组的第一行和第一列的特殊处理。

2024-09-04 17:11:48 893

原创 静态方法与实例方法

依赖性静态方法:与类本身关联,不依赖于任何特定实例。动态方法:与特定实例关联,依赖于实例的状态。访问范围静态方法:只能访问静态成员。动态方法:可以访问静态和实例成员。调用方式静态方法:可以通过类名直接调用。动态方法:必须通过实例调用。用途静态方法:适用于那些不依赖于对象状态的操作。动态方法:适用于那些依赖于对象状态的操作。

2024-08-23 21:30:21 610

原创 java实体类

主函数中的s传给了StudentOperator中的printTotalScore直接进行相应方法操作。这种方法适用于需要在对象创建时就初始化依赖对象的情况,并且能够确保对象的状态在方法调用时是有效的。或者使用了默认的包级访问权限(没有明确的修饰符),那么在同一个包内的。类的构造器和任何相关的成员(属性和方法)是可访问的(即不是。类都可以调用这个构造器来创建。),可以在该方法中访问传入的。是在同一个包中的类。

2024-08-23 21:02:08 263

原创 代码随想录听课笔记——回文子串

【代码】代码随想录听课笔记——回文子串。

2024-08-23 20:10:52 282

原创 代码随想录听课笔记1——回溯算法

找出1,2...n中所有长度为k的组合。

2024-08-22 23:38:14 117

原创 洛谷P2670 扫雷游戏——方向数组的应用

这道题要注意,读取m,n之后不能直接用scanf读取字符串,必须用getchar()吃掉换行符,以及字符二维数组每一行读完之后也要用getchar()吃掉换行符。方向数组x[N],y[N],主要用于简化对每个格子周围格子的遍历。

2024-08-15 01:51:51 159

原创 前缀和的应用(洛谷p8649)

这种特殊的k倍子区间恰好可以由开头我们置的0和前缀和数组里面其他的0配对而成!我们一般把前缀和数组的第一项赋值为0.这里的数组b是记录前缀和数组中每个数字出现的次数,比如:用样例 得到的前缀和数组是{0 ,1,3,6,10,15}经过取模后变成{0,1,1,0,0,1}/2种配对方式,但计算阶乘可能会超时,上面的代码同样可以实现计算配对方式数目,大家可以自行模拟体会,在今后可以利用这种方式计算配对数目!按照一般的思路,数组里面有2个1,配对的方式只要一种,有三个0,配对的方式有这么3种。

2024-03-30 21:12:38 286 3

原创 qsort的应用(洛谷p1012)

以此作为排序的标准:比如传入cmp的两个指针解引用出来时21和23,我们不比较21和23的字典序,而是比较拼接起来的2321和2123的字典序,以此作为排序两个元素的标准。这样的操作,一般的情况和比较字典序的结果相同(比较字典序同样会把23排到21前面),对于类似43 431这样的情况呢,同样适用.我们只需要把原来的return strcmp(p1->s,p2->s)改成比较拼起来之后的字符串啦。,使得按照名字的升序排序,与之相反return strcmp(p2->name,p1->name)则是。

2024-03-28 01:20:20 384 1

原创 如何把qsort变成稳定排序

稳定排序(冒泡之类的),可以保证大小相同的元素再排序前后的相对位置不变,但是时间复杂度相对较高,写起来也比较麻烦,(特别是在不能使用本地文件的考试中)),而qsort是大家喜闻乐见的排序函数,我们只需要写一个cmp函数就行了,但是,唯一有点美中不足的是:qsort排序不稳定,这使得在某些问题时,普通的qsort就不能很好解决问题了,这时,我们可以通过结构体来使得qsort稳定。大家肯定能想到,这道题是要用结构体数组存每个人的信息的,然后对按名字的字典序排序qsort,但是注意题目里面这一段话。

2024-03-27 01:45:24 840

原创 C语言双循环链表的各种操作函数

【代码】C语言双循环链表的各种操作函数。

2024-03-26 16:48:49 155 1

原创 C语言qsort详解

/注意这里,排序的元素是n个长度为2的一维数组。3.给结构体数组排序是可以增加一个元素一开始的位置(rank)来使得排序稳定(重要)//这三句可以合并为:return (int*)e1-(int*)e2;//降序可以合并为:return (int*)e2-(int*)e1;//比如首先按照成绩降序排序,成绩相同按照姓名的字典序升序排。(2)先按第一项的升序排序,再按第二项的降序排序。//按照字符串升序排序。//先按名字升序排序,并保证排序稳定。

2024-03-26 16:38:35 375 3

空空如也

空空如也

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

TA关注的人

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