
算法基础
文章平均质量分 70
一些基础的算法
柏箱
这个作者很懒,什么都没留下…
展开
-
Floyd算法求每对顶点之间的最短路径,C++详解
Floyd算法,也称为Floyd-Warshall算法,是一种用于求解图中所有顶点对之间的最短路径的经典算法。它适用于有向图和无向图,并且可以处理带负权边的情况(但不能处理包含负权回路的图)。Floyd算法的时间复杂度为O(n^3),其中n是图中顶点的数量。原创 2025-04-04 10:30:00 · 770 阅读 · 0 评论 -
蓝桥杯python练习——穿越时空之门
作为小蓝的助手,你的任务是帮助小蓝计算出,在这 20242024 位勇者中,有多少人符合穿越时空之门的条件。我们可以联想一下在计算机组成原理或者是c语言课程里面讲过的进制转化,题目给我们一个十进制,如果要转化为二进制,可以不断除以二,有余数则写1,没有就写0,最后得到二进制结果。可以先让5%2,结果为1,然后5//2后变为2,2%2结果为0,然后2//2结果为1,1%2结果为1。在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。对于5来说,二进制为101,各位数之和怎么求呢。原创 2025-03-24 10:00:00 · 680 阅读 · 0 评论 -
蓝桥杯python练习——数字串个数
使用容斥原理,不含3或7的总种类数即为不含3的8^10000加上不含7的8^10000减去不含3也不含7的7^10000种。请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对 109+7109+7 取余后的结果。小蓝喜欢数字 33 和 77,所以数字字符串中必须要有 33 和 77 这两个数字。逆向思维一下,可以用总的可能种类数9^10000减去不含有3或7的种类数。小蓝不喜欢数字 00,所以数字字符串中不可以出现 00;不出现0,即每一位可能是1到9。原创 2025-03-24 10:30:00 · 447 阅读 · 0 评论 -
蓝桥杯python练习——数字三角形
尝试后发现,当行数为偶数时,只有最后一行中间那两个数才能走到,而当行数为奇数时,只有中间的那个值才能走到,所以设置一个flag数组,最初将最后一行能走到的设置为1,相加时只有存在一个1才相加,否则设置为0简化运算,详情见代码。从倒数第二行开始往上遍历,从左往右,让当前位置的值为它下面和下面右边的最大值加上它自己,依次类推,最后dp【1】【1】就是所求值。输入的第一行包含一个整数 N (1≤N≤100)N (1≤N≤100),表示三角形的行数。数字三角形上的数都是 0 至 100 之间的整数。原创 2025-02-26 10:00:00 · 879 阅读 · 0 评论 -
蓝桥杯python练习——单词分析,成绩统计,门牌制作
我最开始想的是使用一个字典,然后遍历字符串,将所有出现过的字符加入到字典中然后设置初始值为0,再第二次遍历,检测到一个字符就将该字符对应的字典数加一,然后设立max为0,遍历字典找到出现次数最多的值,最后再遍历一次字典,发现次数为max则放入ans列表,排列ans列表后,输出列表的第一个值和max即可。思路为,枚举1到2020,再将其强制转化为字符串类型,使用字符串里的count函数求出字符2的数目,累加起来即可,结果为624。接下来 nn 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。原创 2025-02-22 15:18:24 · 749 阅读 · 0 评论 -
算法基础——单调栈,单调队列
以求窗口内最大值为例,想象一个双端队列,从右边入队,每次入队与原来的队列中的最右边的元素比较大小,如果它的数值更大,那么就从右边pop掉原来队列中最右端的那个数,直到最左边的元素最大为止。第三个数为5,5从右往左靠近8,而5比8小,所以8被删除,7大于5,所以7也被删除。然后第二个数为8,想象高度为8的柱子从右往左靠近7,因为7比8小,所以输出7。第一个数为7,想象一个高度为7的柱子,它的左边没有任何数,所以直接输出-1。第四个数为6大于5,所以输出5。第五个数为7大于6,所以输出6。原创 2024-02-14 09:00:00 · 552 阅读 · 0 评论 -
算法基础——位运算,双指针,排序,二分
将所有位往左移或者往右移,过界会直接溢出,所以一般只对正数做这个操作,因为左移时最高一位的符号位会溢出。使用unique可以将重复的元素移动到最后面,再让下标指向最后面的第一个重复的位置的下标。在使用erase从这个下标开始删除到尾部,就可以得到一个排序去重的序列。与非类似,但非是一个逻辑运算,只要一个数大于0,对它!举例:3为00011,<<3为00110,变为6,乘以了2。位运算是以每一位的形式来进行的。sort是一个左闭右开的区间。1^0为1,0^1为1。只有两个都为1才是1。只要有一个为1则是1。原创 2024-02-03 20:24:21 · 648 阅读 · 0 评论 -
算法基础,一维,二维前缀和差分详解
我们用prefix[i]来表示从第一个动物开始直到第i个动物释放了魔法后算出来的总重量与未释放魔法时的总重量的偏移量。prefix[i][j]表示的是从a[1][1]到a[i][j]之间所有数的和。如果我们再让d[6]减1,就可以使得只有a[3]到a[5]加了1这样的操作。我们让d[3]加1,那么a[3],a[4],a[5]......都会加1。则d[i] = a[i] - a[i-1](i >= 2)prefix[3]的值就为a[1]+a[2]+a[3]那么prefix[2]的值就为a[1]+a[2]原创 2024-02-02 21:22:55 · 891 阅读 · 0 评论 -
算法基础——栈,优先队列,map,set,bitset
map和数组类似,如果说数组是值与值之间的对应,那么map就是key和value之间的对应,key和value的类型都是我们自己可以控制的,可以是字符串,也可以是int或者double类型的。可以用count返回1的个数,reset重新全部变为0,可以就把它当成一个bool数组用。内部不能访问 ,默认是大根堆永远能保证最顶端的那个最大,priority_queue。可以pop弹出堆顶,top访问堆顶,size访问元素个数,push推入。是一个有很多位的二进制数,支持位运算。注意:至多只进一次栈。原创 2024-02-05 09:00:00 · 558 阅读 · 0 评论