算法
算法练习
只须一笑不须愁X
欲买桂花同载酒,终不似少年游
展开
-
【洛谷】P5731 【深基5.习6】蛇形方阵 dfs题解
【洛谷】P5731 【深基5.习6】蛇形方阵 dfs题解原创 2022-10-03 23:41:22 · 350 阅读 · 0 评论 -
【算法】计算组合数的四种常用方法
【代码】【算法】计算组合数的四种常用方法。原创 2022-08-28 16:04:13 · 3501 阅读 · 0 评论 -
【算法】判断一个数是否是质数的四种常用方法
判断质数原创 2022-08-25 21:32:09 · 5815 阅读 · 3 评论 -
深入理解快速排序算法+易错点总结
快速排序算法属于分治算法,分治算法有三步(参见以前博客):1.分成子问题2.递归处理3.子问题合并//递归的终止情况 if(l >= r) return;//第一步:分成子问题 int i = l - 1 , j = r + 1 , x = q [ l + r >> 1 ];do i ++;do j --;} //第二步:递归处理子问题 quick_sort(q , l , j) , quick_sort(q , j + 1 , r);...原创 2022-08-11 16:33:40 · 554 阅读 · 1 评论 -
2022AcWing寒假算法每日一题之4213. 最小结果(dfs)
2022AcWing寒假算法每日一题之4213. 最小结果(dfs)题目链接:AcWing4213. 最小结果思路:首先需要确定,该题目明确了运算顺序;由于需要求最小可能值,一般思路为贪心算法但是此题贪心算法需要枚举的情况过多,所以我们可以直接采用暴力搜索的方法,即dfs暴力搜索接下来考虑怎么存储整数,这里采用vector数组进行存储,便于存储每次改变后的值具体代码如下:#include <iostream>#include <vector>#include原创 2022-01-24 21:59:43 · 333 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之2060. 奶牛选美(dfs)
2022AcWing寒假算法每日一题之2060. 奶牛选美(dfs)题目链接:AcWing2060. 奶牛选美思路:1.可以利用反证法证明:当涂色区域数量最小时,必定满足ans = abs(a.x-b.x)+abs(a.y-b.y)-1即求曼哈顿距离,细节注意:-1是因为终点已经是斑点了不用涂色2.定义vector<PII>points[2];用来存储两部分点,再用dfs深搜遍历每个‘X’,将‘X’的坐标存入数组3.分别遍历两部分的点进行比较,找出最小值具体代码如下#include原创 2022-01-23 17:07:52 · 403 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之1884. COW(附上巧妙的位运算方法)
2022AcWing寒假算法每日一题之1884. COW(附上巧妙的位运算方法)题目链接:AcWing1884. COW思路:1. 从前往后遍历字符串,‘O’会和前面的‘C’组成‘CO’,前面有几个‘C’的个数就有几个‘CO’,即o+=c;2. 同理,‘CO’与‘W’组成‘COW’组合,前面有多少个‘CO’,就有多少个‘COW’,即w+=o;3. 可利用位运算进行简单处理(方法二)具体代码如下:#include <iostream>#include <stack>#原创 2022-01-22 18:17:06 · 464 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之1904. 奶牛慢跑(单调栈)
2022AcWing寒假算法每日一题之1904. 奶牛慢跑(单调栈)题目链接:AcWing1904. 奶牛慢跑思路:1.当速度快的奶牛追上速度慢的奶牛时,两头奶牛的速度都变成较慢的那个速度则考虑单调栈算法,当序列单调非减时,满足条件2.由于位置按照递增顺序给出,则位置信息无用具体代码如下:#include <iostream>#include <stack>#include <math.h>#include <cstring>#inclu原创 2022-01-21 15:02:30 · 597 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之1913. 公平摄影 (很有意思的一道题)
2022AcWing寒假算法每日一题之1913. 公平摄影题目链接:AcWing1913. 公平摄影思路:1.分析题目,发现只有两种情况:只存在一种牛时,求最长的连续区间(采用双指针算法)存在两种牛时,两种牛的数量相同(采用hash表离散化+前缀和操作)2.当牛为H时,存入pair 的为-1,当牛为G时存入pair 的为1,则当某一区间中两种牛的数量相等时,该区间和为03.当有两种牛时,需要hash表离散化,hash表中存入的是坐标,作用是判断序列之间的长度,因为当某一区间和为0时,存入h原创 2022-01-21 12:41:36 · 449 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之2041. 干草堆
2022AcWing寒假算法每日一题之2041. 干草堆题目链接:AcWing2041. 干草堆思路:1.在A~B之间加上一个常数,如果一般暴力循环遍历相加会TLE,则考虑差分算法差分相加算法一般过程: h[i]=s[i]-s[i-1]; h[a]+=c; h[b+1]-=c;a为左边界,b为右边界,c为常数,s[i]为一维数组再利用前缀和算法得到a~b之间的值注意:差分算法一般伴随着前缀和算法,利用前缀和算法得到各个位置的值2.最后排序再找到中间值即可具体代码:#include <原创 2022-01-20 15:35:07 · 272 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之2058. 笨拙的手指
2022AcWing寒假算法每日一题之2058. 笨拙的手指题目链接:AcWing2058. 笨拙的手指思路:1.数据范围为0~1e9,则输入的时候按照字符串输入2.将二进制和三进制各位数上的数字分别存入数组中并记录数组的长度,便于后续求原来的值3.多重循环,分别改变各位数上的数字,判断二进制数与三进制数是否相等。细节:在二进制位上的数改变的时候,可以采用异或1的方式进行,因为11=0,01=1;具体代码如下:#include <iostream>#include <ma原创 2022-01-19 23:24:51 · 212 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之1922. 懒惰的牛
2022AcWing寒假算法每日一题之1922. 懒惰的牛题目链接:AcWing1922. 懒惰的牛思路1(对应方法1):易知,该题目需要求数轴上定长线段之间的和的最大值,则可利用区间移动的方法操作,即固定一段定长的线段,在数轴上移动。思路2(对应方法2):由思路1可知,常用的求定长线段之间和的方法是前缀和算法,因此可采用前缀和算法细节注意: 当起点为0时,需要特判,具体解释见代码部分具体代码如下:方法1:#include <iostream>#include <cs原创 2022-01-19 22:01:51 · 299 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之1929. 镜子田地
2022AcWing寒假算法每日一题之1929. 镜子田地题目链接:AcWing1929. 镜子田地思路:1.画图即可判断,该题应该采用深度搜索即dfs2.重点在于方向的判断,判断接下来光线朝哪个方向,这里定义方向d:0(向上)、1(向右)、2(向下)、3(向左),并且当镜子为’ / '时:向下(2) -> 向右(1)向右(1) -> 向下(2)向左(3) -> 向上(0)向上(0) -> 向左(3)转化为前后为异或3的关系当镜子为’ \ '时:向下(原创 2022-01-18 15:56:06 · 393 阅读 · 0 评论 -
2022AcWing寒假算法每日一题之1934. 贝茜放慢脚步
2022寒假算法每日一题(一)题目来源:AcWing1934. 贝茜放慢脚步具体思路:1.由于所有减速信息不是按照顺序给出,考虑顺序,这里设置了两个最小堆,分别存储路程因素和时间因素对减速的干扰2.根据情况分析,首先判断出哪一个影响因素在前,哪一个影响因素在后3.此题分类的细节较多,具体参照注释具体代码如下:#include <iostream>#include <cstring>#include <algorithm>#include <que原创 2022-01-17 23:07:39 · 359 阅读 · 0 评论