摘要:
A 考虑之前选中没有一个的,那么结果就是$min(n s,n t)$ 那么能选中的第一次就是这个结果$+1$,但需要拥有两个 $(s t)$考虑一开始选不中$t$,则但选中$t$时$s$也一定被选中了$($最坏的情况为$s$与$t$并集最小$)$ $ans=n min(s,t)+1$ B 简单想的复 阅读全文
摘要:
"44. 通配符匹配" 动态规划 $f_{i,j}$为$s$匹配$i$,$t$匹配$j$是否成功 贪心 相比之下这个思维性更强 考虑两个 ,两个星号间的过渡,只需要过渡完到第二个星号,第一个星号匹配多少已经无所谓了 所以贪心的处理已经匹配到的之前的最后一个星号的匹配个数 Code(copy) cpp 阅读全文
摘要:
"42. 接雨水" 做法 考虑单独一列能生产多少贡献:用左右最大值去接这列的水 $O(n)$ Code cpp class Solution { public: int mx[1000000],rx[1000000]; int trap(vector& height) { int n(height. 阅读全文
摘要:
"32. 最长有效括号" 做法 $f_{i}$以$i$结尾的最长匹配 前提为$s[i]=')'$ $s[i 1]='('$,则$f[i]=f[i 2]+2$ $s[i 1]=')'\And s[i 1 f[i 1]]='('$,则$f[i]=f[i 1]+f_[i 2 f[i 1]]+2$ 阅读全文
摘要:
A 位数和为$4$的倍数,涉及到进位,直接把最近的$30$个判断一下就好了 B 最大的可能的为:最小值$+k$,如果最大值能$≤$该值则成立,否则输出$ 1$ C 先全部选$b$,看是否能为正,在考虑正的这部分去选$a$,就等于补掉多少个$a b$ D 有一个明显的坑点就是不能整体赋值,大部分$t$ 阅读全文
摘要:
前言 概率的重要性嘛,生活处处皆概率~~其实是因为经常考~~ 基础 $ P(A):表示事件A发生的概率\\ E(A):表示事件A发生的期望$ $对于事件A,E(A)=\frac{1}{P(A)}(A是否发生对B是否发生没有影响)$ $对于两个相互独立事件A和B\\E(A+B)=E(A)+E(B)\\ 阅读全文
摘要:
按秩合并 并查集做成一棵树,启发式维护树高,实现$O(logn)$,我们可以对节点进行一些处理,维护带权 "模板" 经典例题:$连接(u,v)$,查询$(u,v)$什么时候联通的 每个点有一个权值,为该子树与外部联通的时间 可撤销 另一大优点是可撤销,将撤销后的影响通过栈存起来实现(换父亲,高度与子 阅读全文
摘要:
前言 线性基里集合的线性组合能表示出原数组的异或组合 构造 依次插入数,从位数的高到低插入 如果该位无元素$(0)$,将目前元素放进去 如果改为有元素,异或后处理更低一位 解释构造与性质 插入失败:$x\bigotimes d[a]\bigotimes d[b]\bigotimes d[c]...\ 阅读全文
摘要:
前言 堆与可删除堆已经是烂大街的数据结构了,毒瘤的出题人从而考虑从左偏树下手,也就是俗称的可合并堆 性质 我们新定义一个节点的距离为到最近叶子节点的距离 $1、$左儿子距离$≥$右儿子,左偏就是这个意思 $2、$节点距离等于右儿子距离$+1$(显然) $3、$节点距离是$log$级别的(显然) 前置 阅读全文
摘要:
构造 $a$是字符集,$|s|=n$,$nxt[i][j]$表示$i$以后的第一个字符$j$的位置,$0$为根节点,整个图是一个$DAG$ 求一个$A,B$的最长公共子序列$S$,使得$C$是$S$的子序列 还是同样的$Dfs(x,y,z)$,表示一匹配到$C$的$z$位 改变一下$C$的构建方法 阅读全文