八月水题录
板子,可以直接看这个。
拖了二十年的题。很有道理有意思的容斥。\(dp_{i,j,k}\) 变为 \(dp_{i,j}\)(\(j,k\) 两维变成了 \(j\) 的大小关系)确实没想到。
桶排水题。
推式子推式子。可以看这里。
去掉平方数因子之后变成各位说的经典题。定义 \(dp_{i,j}\) 为用前 \(i\) 组数产生 \(j\) 个不合法数对的方案数,容斥一下就完了。
期望 dp。式子秒出但是边界有点难推。
莫队板子。
用 \(\log\) 去存组合数表示大小,学会了。
用线段树存指数。还要用光速幂生气。暴力改区间查就行了。
修了个很久没补的板子(
正解权值线段树。被莫队+优化干过去了。
决策单调性优化。推出式子然后写个分治就完了。
最大的伪光滑数所有质因数相同。由此可以用堆去维护,把第一个生成的最大的伪光滑数里面的质因子(指数大于等于 \(2\))删掉换一个小一点的再扔进堆里面就完了。
单调栈板板。
有趣的构造题。通过一些简单推导可以得到合法的构造方案。
反悔贪心。用链表将差分数组串起来,然后用堆存存,存上这个数减去左右两个数的差值,就能完成反悔机制。可以看这里。
一道思想值得借鉴的好题。二分答案然后将序列转化为 \(01\) 序列,就可以用线段树完成排序操作了。
整体二分。
根据题目的特殊性,直接从最后一位选,大了就买,小了就卖。
神题。可以直接看这里。
乱搞题目。随机 \(100\) 次边的序列看能不能合法就行了。
又是一道乱搞题目。一个数的因子是 \(\operatorname{ghd}\) 的可能性是 \(\dfrac{1}{2}\),随便找 \(10\) 个判断就行了。注意会卡你 rand()
范围。
水题。
水题。
二进制贪心。先选出最小的方案,然后再扩展成答案。
hash 水题。
主席树板子。
主席树板子。
分块。维护一下 \(dp_{i,j}\) 为块 \([i,j]\) 的答案,\(bit_{i,j}\) 为 \(i\) 到结尾出现了多少次 \(j\)。大力分类讨论即可。
线段树静态维护最大子段和。
线段树动态维护最大子段和。
树状数组+并查集。一个数被重复开方之后会变成 \(1\)。
用两个堆,一个大根一个小根随便维护就好。
入门期望 dp。
入门期望 dp。找到对手的位置有点麻烦。
带权并查集。
用 Lyndon 划分干过去了(喜)。
差不多也是个最小表示的板子,也被我用 Lyndon 划分干过去了(喜)。
wqs 二分。限制一下与 \(s\) 相连的边就行了。卡人的点有点多。
构造一个矩阵,使得对于任意 \(a_{i,j}\),满足 \(2a_{i,j}=a{i+1,j},3a_{i,j}=a{i,j+1}\),然后状压 dp 即可。
水题。
二分之后随便跑最短路就行了。
一个优化挺有意思的 dp。定义 \(dp_{i,j,0}\) 为区间 \([i,j-1]\) 内所有节点能否作为 \(j\) 的左子树,\(dp_{i,j,1}\) 为区间 \([i+1,j]\) 内所有节点能否作为 \(i\) 的右子树,拓展一下可达区间就完事儿了。
平衡树板子。
主席树维护一下,稍微魔改下查询就做完了吧。
两种乱搞结合起来过了。
将一种颜色的连通块缩成一个点建一棵新树。设这棵树的直径为 \(d\),答案为 \(\lceil \dfrac{d}{2} \rceil\)。
期望 dp 入门题。
期望 dp 入门题。
水题。
次数期望和价格期望分开算已经成为套路了?
容易忽略推导分别左和右两边的骨牌的重构期望次数。注意到这一点应该就简单了吧。
按 dfn 建棵主席树,然后又变成板子了。
做了一堆非传统题对随机化感到害怕。实际上只需要从它的父亲和它的父亲的其他子节点入手,考虑比其先遍历和后遍历的期望贡献即可。
一定要建反边,不然正着推会出现概率不满 \(1\) 的情况。然后按拓扑序跑一下就行了。
概率 dp 入门题。
以因子 \(5\) 的个数为容量,\(2\) 为价值,跑背包即可。
期望 dp。式子有点繁杂。
好题。可以看这里。
水题。实际上只用判断第一个数加上第二个数是否小于等于最后一个数就好了。
水题。题意迷惑,把连续的一段 \(1\) 提出来排个序随便取就好了。取 \(0\) 的操作是无效的。
令 \(\operatorname{sum}(k)=\sum_{i=1}^k a_i\),用 map
维护方程 \(\operatorname{sum}(i)-i=\operatorname{sum}(j)-j\)。特判一下 \(0\) 就行了。
简单 dp。定义 \(dp_{i,j,k}\) 为第一组考虑前 \(i\) 个,第二组考虑前 \(j\) 个,第三组考虑前 \(k\) 个。转移显然。
KMP 板子。找个时间写写学习笔记。
预处理 \(nxt\) 数组,判断一下 \(n \bmod (n-nxt_n)\) 是否等于 \(0\)。是就有 \(\dfrac{n}{(b-nxt_n)}\) 段,否则就只有 \(1\) 段。
用个栈存下字符串,然后 KMP 去优化跳的过程。时间复杂度就不会退化了。
求 \(\operatorname{border}\) 直接跳 \(nxt\) 数组就行了。计算的话可以用 \(nxt\) 数组的定义设置一个 dp。
看一下整个串是否存在一个 \(\operatorname{border}\) 并且这个 \(\operatorname{border}\) 字符串出现三次及以上。KMP 可以秒啊,跟上个题一样。
Power Strings 的加强。本质相同。
连通块数量=边数-点数。分开统计大力讨论即可。
板子。找个时间补下学习笔记。
跳到 \(nxt\) 为 \(0\) 的地方计算答案。这个过程可以用 KMP 优化(实际上你已经把 \(nxt\) 求出来了)。
求个 \(nxt\)。答案为 \(n-nxt_n\)。
\(k\) 很小。于是预处理个组合数,然后随便写个前缀和就能预处理统计答案了。\(k\) 为质数的时候可以做到 \(O(\log)\),可以看 BZOJ。
数位 dp 入门题。
数位 dp 入门题。存的量有点多。
数位 dp 入门题。注意转成二进制。
KMP 学习完场题目。将这道题与 AC 自动机结合起来,用一个数组存一下节点在树上的深度。根据 \(nxt\) 数组的定义,这个深度就是 \(\operatorname{pre}(1,i)\) 的公共前后缀个数。然后暴跳即可。
定义 \(dp_{i,j,k}\) 为当前第 \(i\) 个数,上两个是 \(j\),上一个是 \(k\)。不存在长度大于等于 \(2\) 的回文子串,当且仅当没有两个数相邻相等或者两个数中间隔一个数相等。数位 dp 即可。
考虑定义 \(g_i\) 为 \(\sum_{j=1}^n [\operatorname{sum}(j)=i]\),答案就是 \(\prod_{i=1}^{60} i^{g_i}\)。至于预处理这个过程,可以直接从高位枚举开始,先将高位的贡献滚到低位,然后看一下这位是否是 \(1\) 并产生贡献即可。就越过了数位 dp。
写个 bfs
处理一下小一点的数据范围,然后可以发现规律当 \(i > 2 \times \max(a,b)\),定义 \(dp(i)\) 为答案,满足 \(dp(i)=\dfrac{i}{\gcd(a,b)}+1\)。于是写个等差数列求和就能过了。
[ZJOI2010]数字计数 乘个权值就过了。不需要去计算 \(0\)。
枚举一下最终的数的数位和,然后对于每一个数位和跑数位 dp 就行了。
不好保存 \(sum\),于是我们的 \(sum\) 直接向 \(2520\) 取模,正确性显然。然后将因子离散化跑数位 dp 就行了。
威尔逊定理简单运用。
反悔贪心神题。可以看这里。
线段树简单题,应该是 NOI2016 最简单的题。
三元环计数板子。
滚个异或前缀和然后直接上莫队。后面那个数据因为是 CF 的强得多。
- CF1401
updating...
- EZEC-3 & SWTR-6
updating...
分类讨论,dp 维护向上向下的链答案,每次 dp 合并即可。
反悔贪心简单题吧。
我没猜错应该是个简单的换根。
维护树上最长/次长的到其子树内怪物的路径长及最长的到其子树外的怪物的路径长,分类讨论一波就完了。
反悔贪心。。。好像更简单了?
令人讶异的结论题。讶异于我考场上没做出来。
树状数组维护一下每一个数逆序对数的贡献,然后分类讨论就行了。
- 点分治专题。
略。