07 2019 档案
摘要:如图所示,将一颗树向右倾斜就得到了一个树状数组,$A[i]$代表 原数组 $C[i]$代表 树状数组 。 而每一个树状数组节点存的是子节点的和: C[1] = A[1]; C[2] = A[1] + A[2]; C[3] = A[3]; C[4] = A[1] + A[2] + A[3] + A[4
阅读全文
摘要:首先知道前缀和概念是什么,假设有一个数列$A$,他的前缀和数列为$S$。 那么很容易就能得到 前缀和 公式:$S[i]=\displaystyle\sum^i_{j=1}A[j]$ 如果要求区间$[l,r]$的和呢? 答案也是很简单:$sum[l,r]=S[r] S[l 1]$ 所以前缀和用来求区间
阅读全文
摘要:这篇博客记录一下两种比较快速的排序。 归并排序和快速排序。 归并排序($O(nlogn)$) 归并排序,顾名思义就是先递归后合并,这里画了一张图简单理解归并过程: 代码肯定要用到递归啦,递归到不能再细分就可以开始合并了。而合并是通过 申请额外的内存空间 来完成的,合并时在左右两个区间内进行比较,按照
阅读全文
摘要:字典树在多个单词匹配长句或者求单词的相似前缀时非常好用。 下面是他的结构: 字典树的每一条边就是一个字母,按照单词字母顺序给节点排序号。 这里用二维数组代表线段树的结构:$tree[i][j]=k$ $i$代表节点序号,$j$代表是上一个节点下面的哪个字母节点($a z$分为$0 25$),$k$代
阅读全文
摘要:本蒟蒻经过一下午的挣扎终于能略微窥探到KMP算法的精妙,也是弥补了以前学数据结构的遗憾,这里记录一下蒟蒻自己理解的KMP算法,博客简略,主要是大概过一下,让自己以后能回忆起来,具体参考 《大话数据结构》 。 KMP的精妙之处就在于它的next数组, next[i] 保存的是第$i$个数之前的字符串
阅读全文
摘要:故事的开始是leetcode的一道Mid难度题 "1109. Corporate Flight Bookings" 一开始做这道题我就直接暴力遍历和加法,结果当然直接超时(qwq蒟蒻的哭泣)。 于是看了一下午线段树,结果这道题也不用自己构建树,因为不涉及区间查询。 直接线性思考(差分数组),直接从头
阅读全文
摘要:异或(^) 运算规则:$1,0 \rightarrow 1$可以抽象的理解为 不进位加法 异或的性质:$A$^$A=0$ $A$^$0=A$ 例题 :有一些数两两重复,除了一个数落单,不开辟额外空间,找到那个数。 思路 :让数组内的 所有数进行异或运算 ,最后的结果就是落单的数。 与(&) 运算
阅读全文
摘要:1. "筱玛爱地理" 费马小定理:$a^{ n}$ $mod$ $p=a^{p n 1}$ $mod$ $p$($p$为质数) 由题目可知$β=V/E$,而结果要求我们对$β$排序后取余,即求$α=β $ $mod$ $N (N=1e9+7)$ 所以很容易根据上面的公式推导出$α=V E^{p 2}
阅读全文
摘要:埃氏法 时间复杂度为$O(nloglogn)$,没有欧拉筛法复杂度小 代码如下: cpp void prime() { num[0] = num[1] = 1;//特判 for (int i = 2; i
阅读全文
摘要:题目来源洛谷: "P1308 统计单词数" 自动机 就是将代码分为几种状态,而下面这道例题就是一个 有穷自动机 ,划分为两种状态: ①是空格 ②是字母 个人理解有穷自动机就是每一步只做唯一一件事,并且每走一步一定要 判断并修改状态 。 代码如下: c++ include include includ
阅读全文
摘要:首先将指数转换为2进制,如$2^{11}$,指数11的二进制为1011,即$8+2+1$,可以得到$2^{11}=2^8+2^2+2^1$。 所以通过base的自增和判断指数二进制具体位的0或者1来给ans加base。这样时间复杂度$O(n)=log(n)$,效率很高。 1.题目来源洛谷: "P12
阅读全文
摘要:01背包问题思想是将将总数进行拆分,拆分成每块钱(每个重量基数)。 算法实现是将每个物体抽象为一行,每一列为总数的细分,再分别从物体本身的价格(重量)到总数循环,每一次都进行f[i]=max{f[i],f[i v[j]]+v[i] w[i]}(f[i]为每一格的最大收益,v[i]为物体价格/重量,w
阅读全文
摘要:时间复杂度 分析方法: 只要关注最大阶级的量级即可。 加法法则:总复杂度等于量级最大的那段代码的复杂度 乘法法则:嵌套代码复杂度等于嵌套内外代码复杂度的乘积 不同复杂度大小比较: $O(1) 常见$O(logn)$算法有二分查找 而$O(nlogn)$就是$logn$循环执行n遍的结果。 快速排序复
阅读全文
摘要:记忆化搜索: 理解:记忆化搜索是在递归或搜索需要消耗很多资源的时候,在每一次return的时候顺便用一个数组来存放这个节点的数据。在每一次判断的时候判断数组该节点是否为空,不为空就可以直接调用该节点的数组,省去了重复递归或者搜索的时间。 题目①:P1464 Function AC代码: #inclu
阅读全文
摘要:1.打表: 来源洛谷:P1217 回文质数 第一次用打表的方法做题,感觉打开了新世界。 打表法就是将题目中需要的答案集合提前算出来,存到代码里,根据题目所需取答案。 在数据量很大但所给时间比较少的情况下使用效果显著。 详细过程集成在代码注释中: #include<iostream> //#inclu
阅读全文