- 博客(27)
- 收藏
- 关注
原创 并查集(还有反集也在)
定义:并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。主要构成:并查集主要由一个整型数组pre[ ]和两个函数find( )、join( )构成。数组 pre[ ] 记录了每个点的前驱节点是谁,函数 find(x) 用于查找指定节点 x 属于哪个集合,函数 join(x,y) 用于合并两个节点 x 和 y。
2024-07-07 22:17:49
1021
原创 计算机系统基础实验三(解了但尽量理解)
1、下载好32位的实验代码后,将文件解压缩并且通过共享文件夹操作将文件添加到虚拟机中,双击查看bomb.c代码,将c代码完整看了一遍,发现看这里的c代码是无从下手的,代码中只含有主函数,触发炸弹的过程被隐藏了起来。阅读老师给出的readme文件后,得知本题需要在Linux终端中对汇编代码进行分析并且调试才能得出答案。2、输入objdump -d bomb,将可执行文件反汇编成汇编文件,为方便查看,可以使用objdump -d bomb >1.txt将汇编代码输出到txt文档里3、试探一下炸弹爆炸的效果,
2024-05-29 20:31:25
950
原创 The 2023 ICPC Asia Hangzhou Regional Contest (The 2nd Universal Cup. Stage 22: Hangzhou)D、J、M题题解
这道题一定要看清题,题中给的就是一个V图,就不用再排序了。然后针对于这个图,我们发现最大的有可能的三个范围实际上就是全部的sum/n或者是最低点左边的全部和加上右边第一个除以对应的个数或者是最低点右边的和加上最低点左边的数除以相应的个数,这个可以大概理解一下,这个代码中要注意的是,我们最后要保留9位输出的话,也就是意味着我们要使用double类型的变量,但输入时数据为int类型,因此我们直接用int接受,但最后使用出发求职的时候用1.0L*res这种方式使得结果变为double类型。
2024-05-01 21:52:35
86
原创 归并排序精讲
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
2024-04-22 22:49:47
494
原创 字符串输入输出问题和几种常见函数(不全找我)
使用标准库类型 string 声明并初始化一个字符串,需要包含头文件string。string s1;// 初始化一个空字符串// 初始化s2,并用s1初始化// 作用同上// 用 "hello world" 初始化 s4,除了最后的空字符外其他都拷贝到s4中// 作用同上// 初始化s6为:aaaaaa// s7 是从 s6 的下标 3 开始的字符拷贝// s7 是从 s6 的下标 pos 开始的 len 个字符的拷贝使用 = 的是拷贝初始化,使用 () 的是直接初始化。
2024-04-16 23:31:54
1247
原创 Csapp整数浮点数操作实验(精讲)
这行代码将 abzero 和 nature 相加,如果 x 同时满足大于0且符合2的幂的性质,则 result 为0,否则不为0。:这行代码将 x 加上 -1(即取反加一),然后提取了结果的符号位,实现了一种获取 x 是否大于0 的方式。:这行代码计算了 x 与 x - 1 的按位与,如果 x 是2的幂,其结果将为0。result,即如果 x 是2的幂,则返回1(真),否则返回0(假)。和上一个isGreater 函数方法类似,需要考虑 x<0时溢出的情况,所以分为x>=0和x<0两种情况。
2024-04-14 22:31:18
1404
1
原创 Data Lab1(深入理解计算机系统)精讲
对于这个我们考虑,将0x30按位取反再加一之后应该为0x30的相反数,所以我们再加上x。同理,对于小于0x39这个条件,我们将x按位取反加一再加上0x39就可以得到0x39-x的值。使用掩码0x01 获得x的最低位,其他位相当于全是和0进行&运算因此全是0,通过左移到最高,位, 进行算术右移,变为由32个符号位组成的int数据。一个数的编码中,“1”所在的位权最小的位的低位全为0,即为“…返回⼀个掩码,在该掩码中标识了⼆进制数x的所有位中,“1”所在的位权最 小的位。的8部分中各自“1”的总数存放在了。
2024-04-09 21:22:00
1384
原创 链表保姆级精讲
在 C++ 中,std::list 是标准库提供的一个容器类,用于将数据进行链式存储。链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。1.链表的组成:链表由一系列结点组成。2.结点的组成:1.存储数据元素的数据域 2.存储下一个结点地址的指针域。STL中的链表是一个双向循环链表,由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。
2024-04-06 11:37:29
941
1
原创 树状数组(吃不懂私聊我)
树状数组(Binary Indexed Tree, Fenwick Tree),是一种用于高效处理对一个存储数字的列表进行更新及求前缀和、区间和的数据结构。什么是前缀和以及区间和?前缀和是一个数组的某项下标之前(包括此项元素)的所有数组元素的和。区间和就是给定区间的数组的和。它的查询和修改的时间复杂度都是log(n),空间复杂度则为O(n)。这正是使用树状数组的原因。(碰到更新元素、求前缀和、区间和就可以考虑树状数组)。顾名思义就是一个结构为树形结构。
2024-03-26 23:18:51
912
原创 浮点数(内含多种易消化元素,更适合大学生宝宝体质)
浮点数是与定点数相对的概念,计算机中的定点数约定小数点的位置不变,即人为约定俗成地规定了一个数小数点的位置。例如定点纯整数约定了小数点在数值位的最后。定点纯小数约定了数值位的最高位在小数点后面。由于计算机字长的限制,当需要表示的数据有很大的数值范围时,他们不能直接用定点小数或者定点整数表示。
2024-03-26 20:19:14
1376
原创 一举消灭掉原码、反码、补码、有符号数、无符号数、符号扩展、运算
计算机中只由1和0表示,当然包括我们常见的表示负数的符号"-",规定:一个有符号二进制数,其最高位为符号位,1表示负,0表示正,剩余位才是数值域。所以一个字节(8位),如果无符号可以表示2^8个(其范围为:0~2^8-1)不同的数(在计算机中可能是对应2^8个不同的状态),但是如果是有符号数,则需要牺牲最高位来表示符号位,所以虽然同样可以表示2^8个数,但是表示范围成了:-2^7 ~ 2^7-1。(原码表示法中,最高位(符号位)用于表示整数的正负(0表示正数,1表示负数),其余位表示数值的大小。
2024-03-21 20:52:57
961
1
原创 逻辑移位与算数移位精讲
算术是带有符号的数据,所以我们不能直接移动所有的位数,这可能会使得符号不正确。算术移位是对有符号数进行的,符号位不变,对数值位进行移动。对于逻辑移位,就是不考虑符号位,移位的结果只是数据所有的位数进行移位。左移1位:0,1100。左移2位:0,1000。右移1位:0,0011。右移2位:0,0001。左移1位:1,1100。左移2位:1,1000。右移1位:1,0011。右移2位:1,0001。左移1位:1,0100。左移2位:1,1000。右移1位:1,1101。右移2位:1,1110。
2024-03-21 19:34:09
412
1
原创 多重背包、分组背包入坑范例加经典解析
二维数组的表示,F[i][j]代表到 i 个物品时,当前背包容量为 j 时所能拿到的最大价值。非常容易理解,我们主要考虑一下优化,用一维数组来表示,则用 F [j] 代表当前背包容量为 j时所能拿到的最大价值。这里的就表示了第i组的v。每组数据接下来有Si 行,每行有两个整数vij,wij,用空格隔开,分别表示第i 个物品组的第j 个物品的体积和价值;第 j 组物品有sj个物品,组内的第i个物品体积是 vi,价值是 wi,
2024-03-20 19:09:08
424
1
原创 完全背包精讲
接下来有 n 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。装得下分为两种情况1.装 2.不装 同时注意是与f[i][j-w[i]]+v[i]比较而不是i。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。第一行两个整数,n,m,用空格隔开,分别表示物品数量和背包容积。1.状态函数f[i][j]表示第i件物品容量为j最大价值。第 i 件物品的体积是 vi,价值是 wi。有 n 件物品和一个容量是 m 的背包。输出一个整数,表示最大价值。
2024-03-20 18:54:54
178
1
原创 动态规划dp详解(破解之道,就在其中)
动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。简单来说,动态规划其实就是,给定一个问题,我们把它拆成一个个子问题,直到子问题可以直接解决。然后呢,把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。
2024-03-20 15:15:16
2572
原创 欧几里得(辗转相除)算法与扩展欧几里得算法保姆级讲解
为什么我们大家用扩展欧几里得算法都命名为exgcd,实际上就是extend-gcd的意思。我们先介绍一下裴蜀定理若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by=m中的m一定是d的倍数。(特别地,如果a、b是整数,那么一定存在整数x、y使ax+by=gcd(a,b)。扩展欧几里得算法解决的是这样的一个问题:我们现在给定两个非零的整数a和b,求一组整数解(x,y)使得ax+by = gcd(a,b)成立,其中gcd(a,b)表示a和b的最大公约数。
2024-03-04 19:43:50
513
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人