- 博客(44)
- 收藏
- 关注
原创 Mb,Kb,byte,bits
位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB的空间可以存储多少个。的内存空间开一个数组,数组的每个元素都是。1KB=1024byte(字节);1byte=8bits(位);
2025-04-09 20:54:29
186
原创 SPFA算法+Floyd-Warshall算法+dijkstra算法
最坏情况时间复杂度:O(n⋅m),n是节点数,m是边数;2.实际运行效率通常优于Dijkstra。1.能处理带有负权边的最短路径问题。1.存在负权环,无法检测出。平均时间复杂度:O(m)
2025-03-31 15:35:46
202
原创 线段树——>建树build,区间查询query,单点更新adddate,区间更新update,懒标记
【代码】线段树——>建树build,区间查询query,单点更新adddate,区间更新update,懒标记。
2025-03-30 14:22:23
141
原创 逆元的应用,存在条件
这个定理说明,对于质数p和整数a,a的(p-1) 对模 p 运算的结果是 1。在模m下,数a的逆元条件是a与m互质(即gcd(a,m)=1)那么b就是a在模m下的逆元,记作:a的-1次方mod(m)。如果gcd(a,m)>1,则a在模m下没有逆元。在模7下,找到3的逆元。逆元:又叫做“乘法逆元”。
2025-02-26 13:55:27
349
原创 重载运算符
"运算符,使得在priority_queue中,当比较两个node对象时,较小的step值会被认为是“大”节点,从而被优先处理。,即当前节点t的step比a的step小,那么返回false,表示当前节点t的优先级高,会优先处理。",来改变优先队列的排序规则,使得每次弹出的元素是step值最小的节点,从而实现最小堆的行为。,即当前节点t的step比a的step大,那么返回true,表示在优先队列中t的优先级低。默认是一个最大堆(即每次弹出的元素是当前队列中最大的元素)。,然后是节点 A 和 B。
2025-02-22 11:48:56
309
原创 全局变量,局部变量
因为在函数中调用这个全局变量时,调用的值是在头文件下面的初始值,虽然你在main函数中改变了变量的值,但是你在main函数中重新定义了。如果这样写会过50%的数据,因为在main函数中又重新定义了,把main函数中的定义去掉时就可以ac代码了。在main函数中又定义一遍全局变量:会导致程序出错。
2025-02-22 11:34:51
139
原创 多组输入时要记得“清空”+用数组模拟队列
因为是多组输入,忘记清空队列,导致Wrong answer现在改一下queue<node>q的位置;假如不用queue,可以用数组模拟队列:
2025-01-03 13:27:55
122
2
原创 强制类型转换算乘除加括号与不加括号的区别
然后,执行long long 类型和(a[5]+1)的乘法;首先,计算括号里面的(a[5]*(a[5]+1))/2;其次,将a[5]强制转换为long long 类型;然后,将第一步的结果强制转换为long long类型。首先,计算a[5]+1;最后,将结果除以2;最后,将结果除以2;
2024-12-31 13:28:30
339
原创 树状数组的原理及树状数组的样子
如果能被2^0整除就是第0层;2^1整除就是第1层;2^2整除就是第二层......后面有几个零就是第几层。附一张树状数组的图片。
2024-12-27 20:58:59
210
原创 sscanf和c_str
返回的是一个C风格的字符串,这个字符串与原字符串的内容相同,但它并不允许修改字符串的内容。失败时:返回EOF(通常是-1),表示格式化字符串没有正确匹配的输入;c_str:是C++标准库中string类的成员函数;函数是 C 风格的函数,要求输入是 C 风格的字符串。sscanf是C和C++标准库中的一个函数;允许从一个格式化的字符串中解析出多个值;%d:解析整数(年份,小时,分钟等);从字符串中按指定格式提取数据;成功时:返回成功提取的项目数;%x:解析十六进制整数。%c:解析单个字符;
2024-12-24 17:53:50
208
原创 stringstream的应用
4.流结束时(EOF),当读取到流的末尾时,stringstream会停止读取。1.它在遇到空白字符(空格。换行符)时会停止读取当前数据项。2.对于数字类型,在遇到非数字字符时,读取会停止。这个代码中有个stringstream的应用;关于stringstream,3.遇到流状态错误时会停止。
2024-12-20 15:21:05
148
原创 线性同余方程+模运算取正余数
如果c≡j-a*i(modn),意思是c和j-a*i对n取余后的余数相等。C+a*i≡j(modn),意思是c+a*i和j对n取余后的余数相等。3.模运算取正余数的方法。
2024-12-07 11:06:56
205
原创 C语言头文件<string.h>下的常用函数,<algorithm>和<string>头文件下find的区别
6.strchr():在字符串中查找某个字符的首次出现的位置。7.strstr():在字符串中查找子字符串首次出现的位置。是一个无符号的整数类型,常用于表示内存大小和数组索引)1.strlen():计算字符串的长度。5.strcmp():字符串的比较。2.strcpy():字符串复制。3.strcat():字符串拼接。4.strlen():字符串长度。0:第一个字符串大于第二个。=0:两个字符串相等。
2024-09-09 20:46:50
271
原创 to_string /atoi/c_str()
3.atoi需要一个const char*类型的参数,c_str()会返回一个指向字符串const char*的指针。1.to_stirng()是一个把数字转换为字符的函数,在头文件中。2.atoi转换函数,只能转换以数字开头的字符串。
2024-09-01 11:20:10
253
原创 malloc和new分配内存时的区别
2.new会自动调用构造函数来初始化函数,返回的是正确的指针类型,不需要进行类型转换。malloc只是分配原始的内存块,需要指明转换类型,需要手动初始化结构体成员。malloc使用free函数来释放malloc分配的内存。4.new更适合C++,malloc更适合传统的C风格。3.new用delete操作符释放new分配的内存。malloc是一个动态分配内存的函数。1.new是一个操作符。
2024-08-15 14:39:02
173
原创 遍历单双向链表
无论是单向链表还是双向链表,这种遍历方式都是可行的。:在每次迭代中,访问当前节点后,通过。,从链表的第一个实际节点开始遍历。更新为下一个节点的索引。
2024-08-09 20:13:33
104
原创 malloc+顺序表(查找,插入,删除)
1.用户输入时是以回车键(’\n')结束输入,但在C和C++中,字符串内部使用('\0')来表示字符串的结束。n*sizeof(int):表示需要分配n个int类型的内存空间。调用:int* arr=(int*)malloc(n*sizeof(int));int*将malloc返回的void指针转换为int*类型。头文件:#include <stdlib.h>指针-指针得到的是两个元素之间的个数。),然后将其替换为字符串终止符(),确保字符串能够正确处理。两个指针指向同一块空间。2.malloc函数。
2024-08-09 20:08:53
365
原创 最长递增子序列(当动态规划dp超时时,用二分法nlogn)
/使用二分法在low数组中找到第一个大于等于。} //a[i]的位置,并用a[i]替换它。
2024-08-02 15:34:06
160
原创 5.20——高精度加减乘法+strcmp函数
用于比较字符串,而不是两个整数,它的参数应该是指向以空字符结尾的字符数组的指针。在头文件<cstring>中。4.关于strcmp函数;
2024-05-20 18:46:30
204
1
原创 指针的简单了解
指针的类型决定了对指针解引用的时候有多大的权限(能操作几个字节)。比如:char*的指针解引用就只能访问一个字节,而int*的指针的解引用就能访问4个字节。1>>在32位机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。2>>如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。为了能够有效的访问到内存的每一个单元,就给内存进行了编导,这些编号被称为该内存的地址。为什么指针的大小是相同的呢?
2024-05-20 18:32:36
266
1
原创 线性表的顺序存储和链式存储
访问下标为i的元素:l.arr[i]或ptrl->arr[i];线性表的长度:l.last+1或ptrl->last+1;利用数组的连续存储空间顺序存放线性表的各元素;表的起始位置称为表头,表结束位置称为表尾;表中元素个数成为线性表的长度;线性表没有元素时,成为空表;
2024-05-08 11:21:47
285
1
原创 string头文件下的常用函数总结
10,replace()——用一个新的字符串替换指定位置的字符或字符串。3,empty()——检查字符串是否为空,返回true或者false。2,size()——返回字符串大小,与length()作用相同。6,insert()——在指定位置插入一个字符串或者字符序列。8,substr()——返回从指定位置开始的指定长度的字符串。9,find()——在字符串中查找第一次出现指定字符串的位置。5,append()——将一个字符串添加到当前字符串的末尾。7,erase()——删除指定位置的字符。
2024-04-11 20:35:22
527
1
原创 二维动态数组+双指针+宏+向量容器+逻辑运算(与或非异或)+异或和
意义:可以在数组中存储一系列的以为数组表现形式:vector<vector<int>>arr;初始化的方式:3>> 初始化列表初始化意义:定义两个指针 (即是索引下标)一个从前面,一个从后面,两者同时向中间移动,并交换元素,时间复杂度o(n);(erase函数的时间复杂度是o(n),如果再加一层for循环,就是o(n^2,erase只是覆盖并不是移除)什么是宏:是一种预处理指令。类型:常量宏,函数宏,代码段宏是如何定义的:#define+宏的名称+宏的替换文本。
2024-04-02 17:49:12
342
1
原创 埃式筛法+欧拉筛法
标记每个数2的倍数,因为在自然数里两步一个偶数,两步一个奇数,大部分合数也是2的倍数,所以标记2*i足以筛出一大部分非质数;
2024-03-20 22:39:13
322
1
原创 欧几里得算法+扩展欧几里得算法(应用于线性同余方程)
当A=12921,B=4234时,12921/4234=3余219,此时219作除数,4234作被除数,则4234/219=19余73,然后73作除数,219作被除数,则219/73=3余0;因为R=A-B*q,所以代入得:R=a*u-b*u*q=u*(a-b*q);所以带入化简得:a*y1+b(x1-(a/b)*y1)=gcd(a,b);由上式定理可得:b*x1+(a%b)*x2=gcd(b,a%b);假设A和B的最大公约数为u,则A=a*u,B=b*u;又因为:a%b=a-(a/b)*b。
2024-03-18 23:28:11
516
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人