08 2021 档案
摘要:模板】KMP字符串匹配 从暴力说起 KMP字符串匹配用于两个字符串中,是否一个字符串是另一个的子串 我们称其中两个串一个为S(长度为n),一个为P(长度为m),问是否P为S的字串 这种题暴力的想法很容易想到但时间复杂度为\(O(nm)\) 遇到KMP 其实KMP也就只是在暴力的想法上进行了优化,不过
阅读全文
摘要:##区间选数 #include<cstdio> #include<cstring> #include<iostream> #include<ctime> #include<cstdlib> using namespace std; int n,k; int t; int main(){ ios::s
阅读全文
摘要:##牛客竞赛数据结构专题班树状数组、线段树练习题 笔者蒟蒻能力有限,能写几道写几道 ###[NOIP2012]借教室 显然很符合线段树的操作,但是是区间和,还是区间最小值,还是区间最大值需要甄选 简化题意:求第几个操作后区间出现小于等于0,先输出-1,再输出第几个操作,如果操作完后都大于0,那么输出
阅读全文
摘要:蒟蒻能写几道水题题解吧 A 根据题意模拟,都还活着就加上两人攻击力和,同时小于等于0,直接跳出,还有一方存活加上10*攻击力退出 #include<cstdio> #include<cstring> #include<iostream> using namespace std; int a,b,h,
阅读全文
摘要:##严格次小生成树 ###前言 洛谷最优解rank1,u1s1快是真的快,好写是真的好写,理解也很好理解 简直酸爽,舒服了 非原创,仅作解释 ###正文 严格次小生成树,顾名思义,权值仅仅小于最小生成树 重点解释这个查询 inline int query(int x,int y,int w)//此时
阅读全文
摘要:题目传送 就离谱,再次被语文AK,顺便学了点unordered_set 移动元素后 分四种情况 假设元素原位置为$i$,移动后为$j$ $pre[]$为序列前缀和,$suf[]$为序列后缀和 1.\(j<i\) 且可能存在 $k<j$或 \(i<k\),\(pre[k]=sum[n]/2\) 2.\
阅读全文
摘要:##费解的开关 这种题较少见也较难想 按一个开关,会影响上下左右四个方向的数 先可以考虑,只有一排灯的情况 那么一排灯的情况,只有32种按法即$2^5$次,可以用$1~32$每个数的二进制数表示方案,1表示改变灯,0表示不变 如果有两排灯了?是不是感觉有点不知所措 容易发现,改变第一排灯的状态,那么
阅读全文
摘要:##[题目传送 很明显是有关二进制的的题 ###三种位运算简单介绍 and 即 & (按位与) 二进制下同一位同为1,位运算后为1 例如 \(1001 & 0111 = 0001\) \(1001\) \(&0111\) \(=0001\) \(1&1=1 1&0=1 0&1=1 0&0=0\) o
阅读全文
摘要:#有理数取余[模板] 简单总结几下 设p=19260817 \(\frac{a}{b} \mod p\) 令$x=\frac{a}{b} (\mod p)$ 同乘性,两边同乘$b$,\(x*b=\frac{a}{b}*b (\mod p)\) 化简为 \(b*x=a(\mod p)\) (1) 类似
阅读全文
摘要:逆元 逆元定义:若\(a*x=1(\mod b)\) 且\(a,b\)互质,则称\(x\)为\(a\)的逆元,记作\(a^{-1}\) 逆元应用 求\((t/a)\mod b\) 时,转化为\(t*a^{-1} \mod b\) 三种方法求逆元 以此题为例 扩展欧几里德定理 根据定义可转化为\(a*
阅读全文
摘要:#大逃离 基本就是模板题 加了1个限制,能到达点的个数不小于k 注意:出度+入度≠能到达点的个数,此时n的范围又很小,可以开个二维数组标记能到达的点,且同时统计数量 #include<cstdio> #include<cstring> #include<algorithm> #include<ios
阅读全文
摘要:#排列 生成一种排列,但排列不能升序 不能是升序的原因,因为$a_i≠i$,而序列全是都是唯一值,升序存在一种可能1,2,3,...,n 此时$a_i=i$ 这里提供一种解法 第n位为1,其余为i+1 #include<cstdio> #include<cstring> #include<iostr
阅读全文
摘要:#[GXOI/GZOI2019]旅行者 简化题意 给一个n个点,m条边的有向图,找k个点之间的最小距离$(n<=100000 ,m<=500000)$ 时间复杂度:\(O(Tnlogn)\) 有个时间复杂度为$O(Tnlog_{2}^{2}n)$的解法 (其实时间允许可以用floyed) 出题人:想
阅读全文
摘要:##[USACO06NOV]Roadblocks G 只需要在最短路的基础上改亿改就可以了 两个数组 $dis1[]$存储最短路 $dis2[]$存储次短路 次短路分三种情况 可以更新最短路,次短路继承更新前的最短路,然后更新最短路(原因很简单,因为目前的最短路可以更新说明这不是最短路,但可能是此次
阅读全文
摘要:#中位数 (考时脑壳抽了 思路其实很简单 容易知道最终序列长度为$n-k$ 如果不操作,最小的中位数,即为位置为$(n-k+1)/2$ 我们把删去的数全都往中位数右边的数加即可,中位数不变 $n-k$的序列中位数最小值 就是位置$(n-k+1)/2$ 如果$k==n-1$,原序列和即为所求 记得排序
阅读全文
摘要:#笛卡尔树 前置知识:单调栈 基础知识 这里做点总结 笛卡尔树有两条性质 二叉搜索树 小根堆 定理:编号权值互不相同的笛卡尔树构造是唯一的 二叉搜索树满足 左儿子权值小于父节点,右儿子权值大于父节点 小根堆满足权值小于左右节点 (两个权值不能混为一谈) 因为笛卡尔树结点是由二元组(x,y)组成 x为
阅读全文
摘要:最短Hamilton路径 关键理解 我们令f[i][j]表示i二进制数中1表示走过的点组成的二进制数,以十进制表示,现在在第j个点的最小值 举例 \(3_{10}=(11)_2,表示经过0和1这两个点,f[3][0]则表示经过0,1两个 点,处于第0个点的最小值,其他同理\) 这个理解了,状压就不是
阅读全文
摘要:##FHQ 平衡树 这次以文艺平衡树为例讲解FHQ 平衡树维护区间信息 ###前言 没有PHQ基础的先看这个 平衡树(一) 区间操作 反转区间 假设反转区间[l,r] 拆分成三段x[1,l-1],y[l,r],z[r+1,n],然后操作中间区间y后合并 对区间用懒标记即可,懒标记标记左右儿子是否反转
阅读全文
摘要:#FHQ 平衡树 fhq 平衡树由范浩强巨佬发明,基于treap,实现无旋保持平衡 treap=tree+heap(中文翻译:树堆 其同时满足BST性质和堆性质 BST简单来说,就是一颗二叉树,根节点的左儿子节点所有值<根节点<根节点的右儿子的所有值 堆的性质,即为二叉树中,父节点的值大于等于(或小
阅读全文
摘要:素数 素数:一个整数大于1除了1和它自己,没有其他约数即为素数 数学语言:\(\forall n \in Z^+ 且 n>=2 同时只存在1|n,n|n\) 与之相反,合数的定义即为除了1和它自己还有约数 小知识:素数只有2和素奇数 素数筛法 穷举法 及枚举\((1,n)\)的所有数,如果某个数能整
阅读全文
摘要:##数组去重 从后往前扫一遍数组,找到未被标记的数,存下来,标记;已经被标记的就不用存下来 code #include<iostream> #include<cstring> using namespace std; int n; const int maxn=55; bool book[maxn*
阅读全文
摘要:##题目传送门 题意:有一种操作可使$2×2$的矩阵中任意三个数进行~操作(0变1,1变0) 易得,操作如果对同一数进行了偶数次,数不变,奇数次变 再加上有操作次数限制,$3nm$次操作 那么把每个数,都操作三次,其他数都操作两次,即可使矩阵任一一数0变为1,1变为0 举个例子 蓝色绿色紫色覆盖的格
阅读全文
摘要:###目录 最大公约数 最小公倍数 扩展欧几里得算法 求解线性同余方程 前置知识整除及同余 ##最大公约数GCD 最大公约数 意思为,两个及更多整数的最大的共同约数 (我们称$GCD(x,y)$为$x,y$的最大公约数) 当$GCD(x,y)==1$时我们称$(x,y)$互质 ###辗转相除法 辗转
阅读全文
摘要:#题目传送门 虽然题很简单,也有其他做法 但这里介绍一种灵活运用二进制的做法 举例就懂了 \((6)_{10}*(9)_{10}=(110)_2*(9)_{10}=(2^2+2^1)_{10} *(9)_10=9*2^2+9*2\) 然后用类似于快速幂的做法边%边+即可 #include<iostr
阅读全文
摘要:#增减序列 最终的目的是让整个序列相等 操作只有一种使$[l,r]\(区间全都\)+1$ 既然整个序列相等,那么整个序列的差分序列应为0 操作的话就可以转化为$a[l]+=1,a[r+1]-=1$ 求的是最少操作次数 通过原数列,我们先求一个原始的差分序列,然后每次操作使,正数-1,负数+1,这样就
阅读全文
摘要:整除 设\(a\)为非零整数,\(b\)是整数 若存在一个整数q,使得b=a*q,则称之为b可以被a整除 记作\(a|b\) 其中\(b\)为\(a\)的倍数,\(a\)为\(b\)的约数(因子) 举例 :\(2|4\),\(5|10\) 整除性质及证明 1. 如果\(a|b\)且\(b|c\),则
阅读全文
摘要:#计算abc 首先 \(0<=a<=b<=c\) 会随机给出 $a+b,a+c,b+c,a+b+c$的值 因为$a,b,c$都为正整数,所以$a+b+c$一定为最大值 然后用$a+b+c$逐个减去即可(注意$a,b,c$大小 code #include<cstdio> #include<iostre
阅读全文
摘要:高精度 有四种高精度如下 (低精度意为可用long long 或int存储的数 高精度一般用于数无法用int,long long表示出来的时候使用 其本质都是用数组存数的每一位,模拟加减乘除,最后从高位输出到低位 (模拟竖式加减乘除) 高精度加法 一般从数组第一位存个位,第二位十位,第三位.....
阅读全文
摘要:#机器翻译 用队列模拟题意即可 #include<cstdio> #include<iostream> #include<cstring> using namespace std; int n,m; int head=0,tail=0; int s[1100]; long long ans=0; b
阅读全文
摘要:因其两题具有相似的地方因此合为一篇题解 题记 #最佳牛围栏 思路: 二分答案 答案即为平均值 如何取check答案是否满足题意,判断一个满足题意的区间是否>=这个平均值 一般可以把序列都减去平均值,然后求出前缀和,判断区间是否大于0(转化为判定性问题) if(sum[i]-min(sum[0]~su
阅读全文
摘要:六个小技巧 1.前缀和 2.差分 3.双指针 4.离散化 5.单调队列 6.单调栈 前缀和 前缀和顾名思义,前面的和,具体来说就是前n项的和 sum为前缀和数组 一维前缀和 第n项的前缀和等于第n-1项前缀和+第i项数之和 \(\sum_{1}^{n}a[i]=\sum_{1}^{n-1}a[i]+
阅读全文
摘要:#二分 二分顾名思义 其实就不断的把东西分为两半 二分自古就有 一尺之棰,日取其半,万世不竭 《庄子·杂篇·天下》 二分在数学中,也有应用,例如零点存在性定理 \(设y=f(x) 如果f(x)在 [a,b]上连续 且 f(a)*f(b)<0 则[a,b]之间存在零点\) 只需要通过不断的二分就可以找
阅读全文
摘要:七个排序 这里介绍七个排序 选择排序 选择排序应该是最简单的排序之一 简单来说,找到剩余区间内的最小值然后放在一个有序区间的末尾 (不用纠结剩余区间什么意思,模拟一遍后你就会知道 模拟一下 假设给整个区间排序 区间内数为 4,3,6,9,8 先找整个区间中的最小值 为3,放在第一位,交换3和4 然后
阅读全文
摘要:均分纸牌 题目描述 有N堆纸牌,编号分别为 1,2,…,N每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的堆上;在编号为N的堆上取的纸牌,只能移到编号为N−1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上,
阅读全文

浙公网安备 33010602011771号