- 博客(26)
- 收藏
- 关注
原创 基础算法思想例题1
1.最小单位即一个三角形,它的宽是4,高是2,2的10次方是1024,2的11次方是2048,所以数组大小要大于2048。y的偏移量:2的n-1次方(y的偏移量为上一个三角形宽度的一半,上一个三角形的宽度为2的n次方,一半为2的n-1次方)把上面的小三角形作为1号三角形,把左下角的小三角形作为2号三角形,把右下角的小三角形作为3号三角形。4.n为1时,是1个小三角形,n为2时,是3个小三角形,即图n为1时的3倍,以此类推。3.第n个三角形的宽为2的(n+1)次方,高为2的n次方。题目类型:递归/分治。
2025-11-08 10:25:35
542
原创 memset函数和fill函数
因为初始化为1不会报错,但是结果不是1。假设int类型的变量x,占4个字节,memset会把每个字节都设置成0x01,最终x的二进制值为0x01010101(十进制约为16843009),而非预期1memset仅,不适合初始化多个字节类型(如int,float等)为非0的数值。
2025-11-08 10:24:23
201
原创 KMP字符串
2.输出真子串在当前字符时,前缀和后缀字符相等的个数。(前缀和后缀都必须是真子串,即不能包含本串)(不知道这个用法怎么说,先看例题吧)1.输出真子串出现在主串中的位置。
2025-10-16 18:57:31
141
原创 滑动窗口【模板】
直接暴力求解对于每个窗口遍历k个元素的话,时间复杂度会是O(nk),对于n=1e6来说会超时。的数组和一个大小为 k 的滑动窗口,窗口从数组最左端移动到最右端。要求输出窗口在每个位置时的最小值和最大值。队列中存储的是数组元素的下标而非值本身,这样可以方便判断元素是否在窗口内;最小值:维护一个单调递增队列,队首元素即为当前窗口最小值。最大值:维护一个单调递减队列,队首元素即为当前窗口最大值。1.先检查队首元素是否还在窗口内,不在则弹出。当窗口形成后(i≥k时),输出队首元素;3.最后将当前元素加入队列。
2025-10-14 16:15:20
160
原创 STL容器
头文件set主要包括set和multiset(两者方法相同,所以以下只用set举例)两个容器,分别是“有序集合”和“有序多重集合”,即前者的元素不能重复,而后者可以包含若干个相等的元素,两者都会将其容器内的元素从小到大自动排序。其中queue容器相当于队列,满足先进先出的原则。优先队列中存储结构体类型,必须要设置优先级,即结构体的比较运算(因为优先队列的堆中要比较大小,才能将对应最大或者最小元素移到堆顶)。对first先排序,大的排在前面,如果first元素相同,再对second元素排序,保持大的在前面。
2025-10-14 16:13:52
330
原创 对顶堆求中位数
因为我们希望快速获取中位数,所以在插入元素时就要维护两个堆的大小大致相等,这样取数的时候就相当于在中间取。题目描述:依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。但是要注意,这道题要求每10个数在一行,如果最后一行不够10个记得也要换行,因为为下次输出做准备。将两个堆的“瓶口”对在一起,整体就组成了一个有序的数据结构(对顶堆)核心平衡原则:0<=最大堆元素个数-最小堆元素个数<=1。
2025-10-14 16:13:19
306
原创 bitset的基础知识
解题思路:把0到m的数变为二进制数,对于二进制来说一个数不是0就是1,所以把p0的每一位设为0,把p1的每一位设为1,然后进行运算。这道题最大的数变为二进制不超过30位,p0和p1的限制条件不一样,因为p0初始值全为0,而p1初始值全为1(至于为什么不一样,我现在还没有搞明白)题目描述:给一个n和m,n代表有n个操作,每次操作时输入一个s和一个t,求从0到m这些数进行n次操作后的最大值。
2025-09-26 11:21:53
262
原创 set函数基础知识点
集合(set)是一个内部自动有序且不含重复元素的容器,它可以在需要删除重复元素的情况下大放异彩,节省时间,减少思维量set<类型名> 变量名其中,类型名可以是 int、double、char、struct,string也可以是 STL 容器:vector、set、queue。
2025-09-26 11:18:56
1062
原创 比赛赛后补题
这道题要考虑四种情况,首先以l为首的,要考虑l后面是o还是s还是e三种情况;再考虑以o为首的,要考虑o后面是s还是e两种情况;再考虑以s为首的,同理,最后考虑e为首的,记得,表示下次就不可以用了。然后再考虑以下应该怎么处理,这一点是我没有想到的,我不知道k应该怎么弄,然后代码中我认为很巧妙,当a[num]为4的时候,不需要消耗k,也就是不用添加字符,当a[num]为3是需要添加一个字符,所以k要减1,代码这样写可以不用循环了,其他的同理,我都没有想到,学到了longlong。
2025-05-25 12:57:54
351
原创 二分答案例题
初始赋值的时候把l赋为最小可能的值,把r赋为最大可能的值,然后再自己写check函数或者写判断条件,自己写的函数有返回值,符合题目中的条件的返回1,否则返回0。先根据题目的要求进行输入,然后用二分模板1或者2,根据题目要求,要知道的是。
2025-04-09 20:31:07
261
原创 高精度的应用
算两个数的和步骤:先用string类型读入数,然后再把string中的字符变为数字逆序存入vector数组里,然后进行相加,相加时如果出现进位要进1。
2025-04-09 18:07:17
175
原创 结构体的基础知识点
例如:利用前面已声明的结构类型struct student,定义一个该类型的变量stu;}stu;3.初始化结构变量struct student stu={“202410”,“阮”,‘M’,98};4.将一个结构作为另一个结构的成员int year;int month;int day;char sex;;5.访问结构成员一般情况:struct student stu;如果一个结构的成员又是另一个结构变量,必须以级联的方式访问结构成员。
2025-03-31 17:57:23
1560
原创 类的有关字符串的两道例题以及一道补题
int _=1,意思是给_赋值为1,while(_--)意思是由前面可知,_=1,循环的条件的_!=0,所以这个循环只会进行一次。
2025-03-19 14:43:38
120
原创 快速幂模板
由上面的可以知道,底数会变成a*a,而指数会变为原来的一半,一直到指数为0结束。而且指数是奇数和偶数的情况不一样,当指数为奇数时,要单独拿出来一个a,再改变底数和指数;当指数是偶数时,就可以直接改变指数和底数。(a*b)%p=(q1*q2)%p,所以a%p=q1,b%p=q2;所以有最上面的那个式子,所以对于每一个乘式,都要对c求余。设a=k1*p+q1,b=k2*p+q2,(a*b)=(...)p+q1*q2//整理可得,加号前面的能把p整除,所以,
2025-03-16 20:35:11
148
原创 时间复杂度(大O法)
在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间(是一个函数式)。实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。有些算法的时间复杂度存在最好、平均和最坏情况:最坏情况:任意输入规模的最大运行次数(上界)平均情况:任意输入规模的期望运行次数最好情况:任意输入规模的最小运行次数(下界)对于这种,我们一般认为:在实际中一般情况关注的是算法的最坏运行情况。
2025-03-16 16:49:20
868
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1