- 博客(38)
- 收藏
- 关注
原创 【C++】防止机械/移动硬盘休眠 - NoSleepHDv1.0
由于外置机械桌面硬盘总是在p图找素材的时候自动休眠,总是要不时的唤醒重启很麻烦,所以写了个防止机械/移动硬盘休眠软件。原理是定期向硬盘中进行文件操作从而防止硬盘休眠。这里是每60秒向硬盘创建一个文件后立刻删除,即可以唤醒硬盘又没有残留。设置了定时退出器,程序到时间会自动退出。(由于每60秒写一次文件,这里的倒计时采用的是每次-1,而不是真的定时器。
2025-02-27 12:40:27
317
原创 【AcWing】870. 约数个数
分别把a1a2直到an全部分解成质数,把每一个数的指数累加在一起,每个数的指数+1相乘就是约数个数。int范围内,最大的约数个数大约1500个左右。
2024-09-12 18:44:14
378
原创 【AcWing】869. 试除法求约数
约数也一定是成对出现的。在枚举的时候也可以只枚举较小的那一个约数就可以了,较大的那个约数直接算。和判断质数一样的道理,同样是试除法。约数:当前数能整除这个数。
2024-09-12 18:39:45
256
原创 【AcWing】861. 二分图的最大匹配(匈牙利算法)
匹配指的是边的数量,成功的匹配指的是两个未被使用的点之间存在一条边(就不存在两条边共用了一个点的)。匈牙利算法,他可以在比较快的时间复杂度之内告诉我们左边和右边成功匹配的最大数是多少。匈牙利算法可以返回成功匹配的最大匹配数是多少。
2024-09-09 14:31:20
401
原创 【AcWing】860. 染色法判定二分图
从前往后遍历每一个点,然后如果当前这个点还没有分好组的话,我们就把它分到左边去(右边也行),分完这个点之后,遍历一下这个点所有的邻点,所有和这个点连通的点,染色这个点所在的连通块。某一次我们一个白色的点,搜到了一个已经染过颜色的点,之前染过颜色这个点和当前这个点颜色是相同的,那就矛盾了,环中的点一定是奇数。我们就可以用这样一种构造方式把整个图分成两个点集,使得所有边都是出现在两个点集之间的,那么显然是一个二分图。二分图,把所有点划分到两边去,使得所有边都是在集合之间的,集合内部没有边。
2024-09-09 14:29:04
513
原创 【AcWing】858. Prim算法求最小生成树
找到不在集合当中,距离最小的点。集合是当前生成树,当前的联通快,集合s表示当前在连通块里所有的点。某一个点到集合的距离就定义成这个点到集合内部的所有边当中长度最小的那个边。就看一下其他点有没有一条边能连向这个集合内部。1到3和2到3距离相同,选哪条边都行。最开始随便挑一个,挑的点1。
2024-09-08 12:14:29
626
原创 【AcWing】851. 求最短路
基本思路就是我更新过谁,我再拿谁来更新别人,一个点如果没有被更新过,拿他来更新别人是没有效果的。只有我变小了,我后面的人才会变小。贝尔曼福特算法看起来就很傻对吧,遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了,a的后继(b)才会变小。用宽搜来做优化,用一个队列,队列里边存的就是所有变小了的结点(队列里存的是待更新的点)。spfa算法其实是对贝尔曼福特算法做一个优化。
2024-09-07 22:28:20
276
原创 【AcWing】853. 有边数限制的最短路(bellman-ford贝尔曼福特算法)
如果第n次迭代,又更新了某些边,那么就说明存在一条最短路径的变边数是>=n的,是n条边。n条边就意味着有n+1个点,1到n只有n个点,抽屉原理,一定有两个点编号一样,路径上就一定环,路径上存在环就一定是更新过了之后,所以这个环一定是负环。存在负权边,1号点不能到5号点,也不能到n号点。5的+oo可以更新n的+oo,每次+oo-2,就不是0x3f3f3f3f了,但还是很大。)(负权回路,一圈的长度小于0。题目限制了经过的边数不超过k条,所以在负环里不能无限转,最多只能转k次,有负环也就无所谓了。
2024-09-06 12:00:58
1447
1
原创 【AcWing】850. Dijkstra求最短路 ii (稀疏图)
【代码】【AcWing】850. Dijkstra求最短路 ii (稀疏图)
2024-09-05 16:35:39
306
原创 【AcWing】849. Dijkstra求最短路 i (稠密图)
每一次迭代都可以确定一个点的最短距离(每次都找当前还没有确定的点中距离最小的一个点(最短距离指的是1号点到当前点的距离),那么这个点的距离一定是最短路,变为确认的点。确定这个点之后,用这个点去更新其他点的最短路。),循环n次,确定n个点的最短距离。此题允许存在重边和自环,如果存在多条边,保留距离最短的那条边。朴素板的Dijkstra由于边数很多,稠密图用邻接矩阵存。从t出去所有的边,t所组成的路径能不能更新其他点的距离。朴素版Dijkstra。
2024-09-05 16:33:48
461
原创 【AcWing】848. 有向图的拓扑序列
只要是有向无环图,至少存在一个入度为0的点,从这个点作为突破口,把这个点和这个点关联的所有边全部删掉,本来就是有向无环图删掉这个点之后还是有向无环图,按照这个方式不断的去突破(找到入度为0的点),最后就是拓扑序列。可以证明一个有向无环图一定存在拓扑序列。(一个有向无环图,至少存在一个入度为0的点)如果有环,找不到一个入度为0的突破口,环上的点一定不会入队。因为一个有向无环图,至少存在一个入度为0的点。换句话说,当我们把一个图按照拓扑序列排好后,他所有的边都是从前指向后的,能展成从前往后的形式。
2024-09-04 16:00:21
540
原创 【AcWing】846. 树的重心(树与图的深度优先遍历)
枚举删除每个点统计最大连通块的点数,点数最小的那个点就是要删除的重心。树的深度优先遍历当中,能求出每个子树的点数。无向图也是一种特殊的有向图。树也是一种特殊的图。
2024-09-03 19:17:42
494
原创 【AcWing】844. 走迷宫(BFS)
它是把距离为1的点作为一层,距离为2的点作为一层,一层一层的搜索,第一步距离为1的点,第二部距离为2的点。深搜搜的顺序是随机的,深搜能保证搜到终点,但不能保证搜到的路径是最短的。权重为1或相同用bfs搜索最短路径,否则还是用专门的最短路径搜索算法。dp可以看作一种特殊的最短路径,没有环存在的最短路径。宽度优先搜索,可以搜到最短路径。
2024-07-07 19:45:32
481
原创 【AcWing】842. 排列数字(DFS)
每一次向下探索都一条路走到黑,直到不能走再回溯。DFS是树形结构,深度优先搜索。横线上填和前面不一样的数字。dfs可以算作递归。
2024-07-06 21:15:19
299
原创 长方形三种侧面展开图(1-4-1、3-3、2-2-2)
给出一个长方形个长、宽、高(分别是a,b,c),判断能否在一张长为 w,宽为 h 的纸上裁剪出这个长方形的某一个侧面展开图。
2024-07-04 16:07:49
544
原创 【AcWing】836. 合并集合(并查集)
基本原理:每个节点存储基本原理:每个集合用一棵树来表示树根的编号就是整个集合的编号.它的父节点,p[x]表示x的父节点。问题3: 如何合并两个集合: p 是x的集合编号,py是y的集合编号。问题2: 如何求x的集合编号: while (p[x]!问题1: 如何判断树根: if (p[x] == x);2.询问两个元素是否在一个集合当中.并查集: 查询时间近乎O(1).1.将两个集合合并.
2024-07-04 15:55:32
184
原创 【AcWing】835. Trie字符串操作(Trie树)
对每一个字符串,从根节点向下看,如果存在与字符串相同的字符就往下走,如果没有相同的字符就在当前位置增加新的字符子节点,直到字符串完结,在对应节点打一个标记“ * ”,用于表示以当前节点结束存在一个字符串。3.字符串匹配但不存在:查询abcd,走1-2-3-4但是没有*号标记,所以不存在abcd字符串。2.字符串不匹配:查询abcf,走1-2-3-之后不存在字符f,所以不存在abcf字符串。1.查找到:查询aced时,有1-10-11-12-*这条路径,所以存在aced字符串。
2024-07-04 15:12:41
295
原创 C++ 在全为1的数组中随机三个位置为0
(使用 std:shufle 函数打乱容器中元素的顺序后,原始顺序是无法直接复原的,因为 std:shufle 不记录任何关于元素原始顺序的信息。如果需要在打乱后能够恢复到原始顺序,可以使用一个额外的容器来存储原始顺序。std:random_device 是一个在 C++ 标准库中用于生成非确定性随机数的类,头文件。它通常用于为随机数生成器(如std:mt19937 )提供种子,以确保每次程序运行时都能产生不同的随机数序列。它用于给容器中的元素赋值,从指定的开始值开始,并逐个递增。
2024-06-20 18:58:29
308
原创 【AcWing】840. 模拟散列表(拉链法、开放寻址法)
在槽上拉链,平均情况下每一条链可以看作一个非常短的常数,一般情况下时间复杂度很好,可以看作o(1)。处理冲突:处理冲突的方式就是拉链法和开放寻址法。(离散化是极其特殊的哈希方式,需要保序。哈希表算法题有添加和查找操作,不会有删除,删除不是真的删除,而是开一个数组给这个点打标记。mod的取值:x mod?是一个质数,离2的整次幂尽可能远,这样冲突概率最小。,但大的数据范围映射到小的区域,会产生冲突,例如h(5)=2,h(10)=2.开到数据个数的2~3倍的数组冲突比较低,哈希函数h(x):把大的取值范围。
2024-06-13 12:34:31
446
1
原创 操作系统实验-分页式存储管理
在实验1基础上实现分页式存储管理内存分配和地址转换过程。进一步实现请求分页式存储管理过程,包括内存和置换空间管理、地址转换以及缺页处理,能够体现FIFO和LRU算法思想。
2024-06-13 11:38:40
1224
原创 操作系统实验-进程控制
模拟操作系统内核对进程的控制和管理:包括进程的创建和撤销、进程状态的切换和简单的内存空间管理。6学时分配的物理内存区域(基址和长度)分配空闲内存空间斜体可参考如下数据结构(动态形式):...创建进程时申请空白PCB:并把新建进程的PCB添加到就绪队列末尾:其中,ready为就绪队列头节点,并在开始处分配了空间;add函数是链表中添加节点函数,代码参考如下:=NULL)图 1-1. (a) 内存空间的示例,有5个进程和3个空闲段,阴影部分表示空闲段。
2024-06-13 11:31:47
940
空空如也
c语言问题,有人懂吗
2022-11-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人