贺题记录

  • [SDOI2017] 遗忘的集合 题解 【多项式】

  • CF387D George and Interesting Graph 【网络流】网络流题,枚举中心点,贡献拆成 “连向中心点”+“连向其他点”,前半部分统计度数直接算,后边部分二分图匹配即可。

  • P4705 玩游戏 【多项式】列出贡献式子,难算的是 \([x^j]A(x)=\sum_{i=1}^na_i^j\),将其交换求和顺序转成封闭形式相加的形式,卡住我的是 \(\sum_{i=1}^n\frac{1}{1-a_ix} = n - \sum_{i=1}^n\frac{-a_i}{1-a_ix}\),简单的代数运算但很神秘,后面是 \(\ln{(x)^\prime}\) 的形式,把和式放进 \(\ln\),变成 \(n\) 个长度为 \(2\) 的多项式相乘,分治求之,最后卷积即可。

  • [HNOI2012] 永无乡 【线段树合并】裸题,并查集维护集合,线段树合并维护集合内的排名,查询二分即可。

  • P3979 遥远的国度 【树链剖分/线段树】 树剖,链推平,子树最值,换根,换根不好处理,分讨一下发现只有在查询节点在树剖的根和现在的根之间的链上时有影响,直接做即可。

  • P1344 追查坏牛奶 【最小割】一个新的思路,求最小边数最小割,把容量变成 \(c\times n+1\),最小割是 \(flow/n\),边数是 \(flow\ \%\ n\)

  • P2172 [国家集训队] 部落战争 【最大流】简单题,模拟后最小路径覆盖即可。

  • P5336 [THUSC2016] 成绩单 【区间DP】看不出来,再次发现自己区间 DP 好菜,首先套路的设状态 f[l][r] 表示区间 \([l,r]\) 取光的代价,写个式子:f[l][r] = min{W(l,r) + a + b * (mx - mi)^2},发现区间的权值只和 max/min 相关,于是设 g[l][r][mi][mx] 表示区间当前的最优状态,这里不一定取空,增量转移,g[l][r+1][min(mi,val[r+1])][min(mx,val[r+1])] = min(g[l][r][mi][mx]),这里是把 r+1 放进来一起转移,g[l][r][mi][mx] = min(g[l][k][mi][mx] + f[k+1][r])这里相当于是把后半段取掉,注意离散化即可。

  • P3454 [POI2007] OSI-Axes of Symmetry 【字符串/计算几何】思路清奇,手玩一下可以发现,如果有对称轴的话,那么按照 “边->角->边” 的形式写下的字符串环一定能分成一个回文链,用叉积代替角度,断环成链哈希判之即可。

  • CF1572D Bridge Club【费用流/优化建图】考虑把点按 popcount 奇偶性分类,按题中规则连边,点数 \(n2^n\),考虑优化,每次增广都会减少 \(n*2-1\) 组匹配,有用的只有 \(k*(n*2-1)\) 组,贪心的选取最大的即可。

  • CF1830E Bully Sort【分块/逆序对】分析一下题中的式子实际上是“逆序对数-\(\sum \max(0,|a_i-i|)\)”,考虑交换的影响:减去修改区间中比左端点小的数加上比它大的数,右端点同理,分块+BIT 维护之。

  • CF997E Good Subsegments 【扫描线/线段树】区间有序相当于 mx - mi = r - l,即 r = mx - mi - l,经典离线扫描线维护右边的值,答案就是 l-r 所有子区间的答案,只需要维护最小值个数的历史版本和即可。

  • CF1004F Sonya and Bitwise OR 【分治/线段树】神题,不带修的话可以直接分治 + 双指针,因为 or 和是单调不降的,并且只有 log 种取值,带修就是借助线段树维护分治过程,将分治“动态化”,维护前缀后缀 or 和即可,pushup 就和朴素分治一样。

  • P1758 [NOI2009] 管道取珠【DP】思路清奇题,把平方转成了对二元组计数,或许可以推广一下:求 \(\sum a_i^k\),相当于是对所有 \((b_1,b_2,...,b_k)\) 计数,因为一种方案数为 \(a_i\) 的方案的 k 次方可以通过乘法原理转成对每一维取值都相同的有序 k 元组计数,过了这里就直接 DP 即可。

  • [数据删除] 【DP】背包题,设 f(i,j,k) 表示第一个人有 j 的体积,第一类洞有 k 的体积,后面两维可以拆开,f(i,j) 表示第一个人有 j 的体积,g(i,j) 表示第一类洞有 j 的体积,答案是两个乘起来,前缀和维护,魔法洞上带删背包即可。

  • [数据删除]【Tire/Min-Max容斥】max 不好求转成 min,三个串拼起来变成统计 tire 树上 lca 的问题,转化成在 lca 处统计答案,树形 dp 求之。

  • [数据删除]【DP】朴素 DP 的瓶颈在于判合法和转移,考虑单调栈处理出每个位置统治的最大的合法区间,两个区间的重合部分就是合法转移区间,考虑类似扫描线的思路,在左端点处加上贡献,右端点处减去,用支持区间最值的数据结构维护即可。

  • [数据删除]【集合论】神秘题,题中实际上是要求一个集合上的最长反链,Dilworth'Theorem 转成最小链覆盖,结论是所有大小为 \(\lceil\frac{m}{2}\rceil\) 的集合,证明考虑把集合分层,按照层的大小连边,那么一定会是一个单峰的形式,所有的起点都在中间。这里有一个构造“从一个大小为 n 的集合中任选 m 个元素” 的技巧(适合于 m 不大),即next_permutation 函数,在初始序列尾部放上 m 个 1 即可。

  • P1081 [NOIP2012 提高组] 开车旅行 【倍增】朴素直接跳好写得很,很容易发现这个过程可以倍增,注意一下边界即可。

  • [模拟赛杂记]【规律】签签签,交换括号影响是给某一个位置+2/-2,因为要全变成非负,所以只选择+2。

  • [模拟赛杂记]【搜索】签到题挂挂挂,搜的时候记录每个位置是 可走/不可走/未知,模拟即可。

  • [模拟赛杂记]【线性基】没有 +1 就是线性基基本操作,考虑把 +1 转成 xor,相当于是 xor 上一个 11111...0 ,反向构建线性基,枚举 0 的位置,

  • [模拟赛杂记]【闵可夫斯基和】按照最小乘积生成树的套路转成平面上的点,答案是一个下凸壳上的点,考虑到仙人掌的特殊性质有另一个转化,从每个环中删掉一条边得到一个下凸壳 \((a_i,b_i)\) 然后拼起来,结合一下就可以得出点的坐标 \((a_1+a_2...,b_1+b_2)\),这不就是闵可夫斯基和嘛,写就完了。

  • P4557 [JSOI2018] 战争 【闵可夫斯基和】板子题,考虑不合法的情况一定有 b + w = a,即 w = a - b(\(a\in A,b \in B\)),后面是闵可夫斯基和的形式,直接做就行,查询的话按极角二分即可,注意特判边界。

  • P4311 士兵占领 【网络流】水题,上下界一眼秒,但是有不用上下界的做法,算出每行每列最多可以删掉的士兵个数,减去即可。数据真水

  • P1117 [NOI2016] 优秀的拆分【哈希/SA】95pts谁打正解,处理出每个断点左右的 AA 串数量再统计即可,可以用hash拿 95pts,正解考虑每隔 len 设置一个断点,那么若相邻的两个断点 l,r 的 lcs + lcp >= r - l + 1 说明存在可行的 AA 串,用 SA 求,差分更新一下即可。

  • [数据删除]【区间DP】考虑刻画状态,[l,r] 可能从上面接到球也可能掉下去球,所以设一维表示掉下去多少球,这样转移的时候就直接枚举上一层掉下来多少就行,复杂度 \(O(n^3max^2(a))\)

  • [数据删除]【并查集/SA】缝合怪,都是我咕掉的题。前一半和 P1117 一样,直接 SA搞,后一半是 P3295,倍增/分治并查集搞搞就行了,思路是每次合并两个区间可以按2^k分块,如果大块合并了就不继续合小块,这样一次操作最多合并 log 次复杂度 \(O(n\log^2n\alpha(n))\)

  • [数据删除]【二进制】考虑在原排列的逆排列 \(p^{-1}\) 上两个操作长什么样,操作一相当于二进制最高位 xor 1,操作二相当于循环右移一位,所以枚举循环右移的位数,考虑每一位是否 xor,但是统计逆序对的时候实际上两个数是否构成逆序只和他们第一个不同的位有关,每位的判断是独立的,所以只需要贪心的选就行,复杂度\(O(n^22^n)\)

  • P4169 [Violet] 天使玩偶/SJY摆棋子 【cdq分治】如果所有点都在查询点的左下方,那么求的就是 \(x_i\le x_s,y_i \le y_s,t_i \le t_s\)\(\max\{x_i+y_i\}\) ,典型的三维偏序,直接旋转坐标系把所有点都转过来即可,注意细节。cdq 分治是非常强力的动态问题静态化的工具。

  • P4755 Beautiful Pair 【cdq分治/主席树】考虑一个区间的贡献怎么构成,是{l...mx-1}+{mx+1...r}+val(l,r),这个东西显然可以分治嘛,双指针后就变成了求 \(\le \frac{val_{mx}}{val_i}\) 的值的数量,主席树维护之。双指针/前缀和是分治的最佳搭档

  • P7423 「PMOI-2」简单构造题 【生成函数】咕咕咕。

  • P5658 [CSP-S2019] 括号树【括号树】这个题的区间问题有一种新奇的结构:括号树,考虑每个节点代表一个大的括号区间,它的儿子代表在他里面的合法括号串,这样合法括号子串的数量就是:\(\sum_{u}{cnt_u\choose 2} + 1\),cnt表示儿子数。

  • P4151 [WC2011] 最大XOR和路径【线性基】考虑一个答案由若干环和一条路径构成,因为从一个点走到一个环再走回来只多了一个环的贡献,所以环是任取的,所以任取一条路径,把所有环丢进线性基跑一边就行。

  • Another MEX Problem【dp/状态优化/SPFA】用一个可行性DP,\(f_{i,j}\) 表示前 \(i\) 个位置能否凑出 \(j\),根据gxy的经典技巧,这东西可以改写成 \(f_i\) 表示拼出 \(i\) 的最小前缀位置暴力转移\(O(n^3)\),考虑优化状态,一个最优的转移区间 \([l,r]\) 合法,当且仅当它不能被一个比它更小的区间平替,事实上这样的区间只有 \(O(n)\) 个,所以直接枚举合法区间转移复杂度 \(O(n^2)\)

  • [胡策选写] this->【平衡树】维护奇数偶数位置的异或和即可,this->【换根dp】维护最长链次长链转移点换根即可,this ->【SA/LCS】排列的LCS转成LIS,后面的部分是板子复习。this->【搜索】质因子指数是单调不升的,可能的状态非常少,搜出来后筛选+打表即可,this->【线段树】灵机一动把非关键点位置最小值设成-inf,这样就能直接上线段树了。

  • P2305 [NOI2014] 购票【斜率优化】是我写不出来的题,DP式子好推的很,\(dp_i = \min\{dp_j + (dis_i - dis_j)\times p_i + q_i\}\),典型的斜率优化式,转化一下:设 \(f_i = dp_i - q_i - dis_i \times p_i\),比较两个转移点 \(j, k\),若 \(dep_i \ge dep_j \ge dep_k\)\(j\)\(k\) 优的条件是 \(dp_j - dis_j \times p_i\le dp_k - dis_k \times p_i\),即 \(\frac{dp_j - dp_k}{dis_j-dis_k} \le p_i\),这里暴力斜优就有了维护一个下凸壳即可,考虑到转移的区间不连续,可能有一些合法的转移点被我们踢出去,可以用一个分治的思路,维护小凸包合成我们需要的大凸包,这里做法就多了,cdq、线段树、树状数组、树分治等具有分治结构的都可以食用,序列上的问题就解决了。考虑上树,因为答案只和当前点到树根的一条链有关,考虑经典技巧:用一个可撤销的单调栈来维护路径信息,但是暴力撤销还是不行,发现每次更新只会影响栈顶指针和至多一个元素的值,维护这两个值即可。

  • P4093 [HEOI2016/TJOI2016] 序列【cdq分治】裸题,偏序关系是 \(mx_x<a_y, a_x < miy,x<y\),cdq分治维护 DP 即可。

  • [数据删除]【图论】发现答案只有三种情况,BIT维护之,但是会在三元环算重,减去即可。

  • [数据删除]【数学】打表发现所有的序列都有解,并且只会是 P 的倍数,答案是 \(p^i\) 当且仅当只有序列最后 \(p^i\) 有值时成立,直接快速幂即可。

  • [数据删除]【数学】这个式子直接算会掉精度,所以考虑算 \(\sum\frac{a_i}{b_i+x+\Delta}\),推一下式子变成 \(\sum_{k\ge0}(-\frac{\Delta}{x})^k\sum\frac{a_i}{b_i+x}(\frac{x}{b_i+x})^k\)

  • [数据删除]【树套树】减小到零就更改答案的经典解决办法是减半警报器,二维平面强制在线矩形减可以树套树,码码码就行了。

  • [数据删除]【斯特林数】答案是

    \[\sum_{i = 0}^n{n \choose i}i^c{\lceil\frac{m}{2}\rceil}^i{\lfloor\frac{m}{2}\rfloor}^{n-i} \]

    像是二项式定理,\(i^c\) 可以代斯特林数的性质 \(n^m = \sum_{i = 0}^m{m \brace i}{n \choose i} i!\)

    \[\begin{split} ans &= \sum_{i = 0} ^ n \sum_{j = 0}^c {c \brace j}{i \choose j} j! {n \choose i}{\lceil\frac{m}{2}\rceil}^i{\lfloor\frac{m}{2}\rfloor}^{n-i}\\ &= \sum_{j = 0} ^ c {c \brace j} n^{\underline j}\sum_{i=0}^n{n - j \choose i - j}{\lceil\frac{m}{2}\rceil}^i{\lfloor\frac{m}{2}\rfloor}^{n-i}\\ &= \sum_{j = 0} ^ c {c \brace j} n^{\underline j}{\lceil\frac{m}{2}\rceil}^j\sum_{i=0}^{n - j}{n - j \choose i}{\lceil\frac{m}{2}\rceil}^i{\lfloor\frac{m}{2}\rfloor}^{n-i-j}\\ &= \sum_{j = 0} ^ c {c \brace j} n^{\underline j}{\lceil\frac{m}{2}\rceil}^j({\lceil\frac{m}{2}\rceil}+{\lfloor\frac{m}{2}\rfloor})^{n-j} \end{split} \]

    就可以 \(O(c)\) 的算了。

  • [数据删除]【线性代数】首先是 Binet-Cauchy 公式:

    \[det(A\times B) = \sum_{s \in \{1,2,...,m\},|s| = n} A\begin{pmatrix}1&2&\cdots&m\\s_1&s_2&\cdots&s_m \end{pmatrix}B\begin{pmatrix}s_1&s_2&\cdots&s_m\\1&2&\cdots&m \end{pmatrix} \]

    \(A,B\) 的所有 \(m\) 阶子式的积的和等于 \(det(AB)\),其中 \(A\)\(n\times m\) 矩阵,\(B\)\(m\times n\) 矩阵。公式右边是要算的贡献,task1 满足 \(det^2(A) = 1\mod 3\),构造 \(B\) 矩阵为 \(A^{\tau}\),对于 task2 构造 \(B\) 矩阵为 \(B_{i,j} = [col_i = j]\)

  • [数据删除]【图论】考虑设状态 \((x, y)\) 表示在 \(x\) 值为 \(y\),一共有 \(1e5\) 个状态,每个状态向它的前后连边,那么询问相当于是从 \((x,0)\) 出发到 \((y, mx)\) 的最大 \(mx\),跑 BFS 从大到小判断是否联通即可。

  • TRANSP - Transposing is Fun 【群论】发现转置相当于是二进制循环位移,问题变成求给一个长为 \(a + b\) 的环染色 \(0\ or\ 1\),操作是旋转 \(a\ or \ b\) 度,考虑 \(polya\) 定理,为了转成旋转 \(1\) 度的形式,把环按照 \(gcd(a,b)\) 一组分成 \(\frac{a+b}{gcd(a,b)}\) 组,那么相当于有一个大小为 \(\frac{a+b}{gcd(a,b)}\) 的环,有 \(2^{gcd(a,b)}\) 种颜色,求本质不同涂色方案数,套板子就行了。

  • P5664 [CSP-S2019] Emiya 家今天的饭【容斥/DP】合法的 = ALL - 有一种超出一半的,先求出总的方案:\(g_{i,j}\) 表示前 \(i\) 行有 \(j\) 种菜的方案,\(g_{i,j} = g_{i-1,j} + sum_i * g_{i-1,j-1}\)。再求出需要剪掉的方案:设 \(f_{i, j, k}\) 表示前 \(i\) 行钦定的不合法菜选了 \(j\) 个,其他选了 \(k\) 个,\(f_{i,j,k} = f_{i-1,j,k}+f_{i-1,j-1,k} * a_{i,col} + f_{i-1,j,k-1} * (sum_i - a_{i,col})\),复杂度 \(O(n^3m)\),考虑优化状态,因为 最后 \(j - k \ge 0\) 的合法,也就是我们只关心 \(j\)\(k\) 大多少,所以状态改成 \(j\)\(k\) 多多少,直接转即可,\(f_{i,j} = f_{i-1,j} + f_{i-1,j-1} * a_{i,col} + f_{i-1,j+1} * (sum_i - a_{i, col})\)

  • P3974 [TJOI2015] 组合数学 - 洛谷 【集合论/DP】相当于是求从左上角到右下角的最小链覆盖,于是 = 最长反链 = 最大独立集,用 DP 实现,设 \(f_{i,j}\) 表示到 \((i,j)\) 的最大独立集,这个格子可以从上面或者右面走过来改并且它不能和 \((i-1,j+1)\) 同时取,所以转移有了:\(f_{i,j} = max(f_{i-1,j}, f_{i,j-1},f_{i-1,j+1} + a_{i,j})\) 实际上直接DP更好懂不是

  • [模拟赛杂记] 【构造】考虑如何构造出上界,按 abcbabcb 循环中间是 6,四边是 3,4, 角上是 2,共 2223,考虑删掉一些点 a 使得满足限制即可。

  • [模拟赛杂记] 【期望】老师的期望是 \(max\{a_i(p_i-1)\} = m\), 二分出一组 \(p\) 的下界即可。注意这时候老师的期望和学生的决策是独立的,可以直接枚举 \(m\)

  • [模拟赛杂记] 【2-sat】根据血型转化后,w=1 相当于有现象,w=0 相当于没现象,每个点拆成四个状态:有无 a,有无 b,2-sat 求之。

  • Jellyfish and EVA【概率DP】设 \(dp_u\) 表示 \(u\)\(n\) 的最大概率,那么有 \(dp_u = \sum_{v \in son_u} dp_v p_v\)\(p_v\) 表示从 \(u\) 走到 \(v\) 的概率,假设现在已经知道了 \(p\) 序列,那么根据排序不等式,顺序和最大,也就是让 \(dp\)\(p\) 顺序一致,可以证明 \(p\) 是单调不降的,所以把 \(dp\) 降序排序后对应位置相乘得到的 \(dp_u\) 是最大的。现在考虑求 \(p\),设 \(g_{i,j}\) 表示 \(out_u =i\)\(p_j\),因为 p 是单调不降的并且先手采取最优决策所以第一个位置肯定第一个选 \(g_{i,1} = \frac{1}{i}\),考虑 \(j \gt 1\),一定是炸掉一个位置后再走过来,又知道先手一定先炸掉第一个位置,讨论下另一个位置和 \(j\) 的关系有:\(g_{i,j} = \frac{j-2}{i} g_{i-2,j-2} + \frac{i - j}{i} g_{i-2,j-1}\)\(g\) 可以预处理,复杂度 \(O(n^2)-O(n\log n+m)\)

  • P2403 [SDOI2010] 所驼门王的宝藏 【SCC/优化建图】naive 的想法是把网格图建出来缩点然后 DP,时空复杂度 \(O(RC)\),考虑优化,因为操作三用到的点是很少的,一个经典技巧用 \(R+C\) 个虚点代替行和列,行列上并没有值,这里起一个桥梁的作用(因为直接只建有用状态正确性不对是因为连通性不对),直接跑复杂度 \(O(R+C+n)\)

  • [格路计数相关]【DP】经典问题缝合怪,默认只能向右下走,因此每次都会走向下一条副对角线。

    1. 网格上两个关键点间不经过其他关键点的路径数:设为 \(g_{i,j}\),枚举路径上第一个关键点有:

      \[g_{i,j} = {x_j + y_j - x_i - y_i \choose x_j - x_i}-\sum_{k = 1}^{i-1}g_{i,k}{x_j + y_j - x_k - y_k \choose x_j - x_k} \]

    2. 网格上经过不超过 k 个关键点到一个点的距离:设 \(f_{i,j}\) 表示关键点 \(i\) 之前经过不超过 \(j\) 个关键点,有转移:

      \[f_{i,j} = \sum_{k=1}^{i-1}f_{k,j-1}*g_{k,i} \]

    3. 网格上找出两条不相交的路径((1,1)->(n,m)):类似 LGV 的思想,容斥一下,(1,2)->(n-1,m) * (2, 1) ->(n, m-1) - (1, 2) ->(n, m-1) * (2, 1) -> (n - 1, m),证明同 LGV,交换相交后一段路径即可。

  • CF1371F【线段树】考虑类似最大子段和的思路,维护左右的 >>>><<< 和 <<<<<>>>>>,以及最长的段,维护正反两套答案。

  • P1954 [NOI2010] 航空管制 【贪心/图论】第一问类似菜肴制作那个题,求最大的拓扑序即可,第二问把当前节点和其祖先之外的节点贪心的从最后一个时间开始分配,直到出现了一个空位,插入当前节点即可。

  • Making Shapes【数位DP】把题目给的条件抽象出来,形如 \(\sum c_ix_i = \sum c_iy_i = 0\),和 \(\sum c_ix_i[x_i\gt 0] \le m,\sum c_ix_i[x_i\lt0]\ge -m\)\(y\) 同理,考虑到 n,x,y 的取值非常小,可以数位 DP 求 C 序列,设 \(dp[p][prex][prey][nprex][nprey][limx][limy]\) 表示当前位,四维的进位,当前位是否卡住上界,转移直接 2^n 枚举即可。

  • School Clubs 鞅与停时定理【概率论】称一个离散过程 \(X\) 为鞅,若:

    \[\forall X_i \in N,E(X_i) \lt \infty\\ E\{X_n+1|X_0,...x_n\} = X_n \]

    具体地说就是已知之前所有的观测值,那么当前的观测期望值等于之前的观测值。

    在某一个时刻 \(\tau\),若可以根据之前的观测值推测出随机过程是否停止,称这个时刻为停时。

    满足:

    • \(\tau\) 几乎一定有界
    • \(|X_{t + 1} - X_t|\) 一致有界,且 \(E(\tau)\) 有限
    • \(X_t\) 一致有界,且 \(\tau\) 几乎一定有限

    则有 \(E(X_{\tau}) = X_0\)

    对于一个随机过程,我们构造它的势能函数 \(\varphi\),满足 \(E(\varphi(A_{t+1}) - \phi(A_t)|A_t,A_{t-1}...,A_0) = -1\),即差分为 -1,构造随机过程 \(X_t = \varphi(A_t) + t\)\(X_t\) 为离散时间鞅。

    有停时定理:\(E(x_\tau) = X_0\to E(\varphi(A_\tau) + \tau) = \varphi(A_0)\to E(\tau) = \phi(A_0) - \phi(A_t)\)

    这样这种求停时的题就可以轻松的用停时定理解决了。

  • [模拟赛杂记]【扫描线】贡献分三类,一个区间内的,扫描线维护以每个节点为结尾的区间的贡献和,每次只会从上一次出现这个颜色到这一次出现这个颜色的区间+1,线段树维护之。跨过一个边界的也类似。跨过一整个区间的,最后总的贡献是 \(sum1*k+sum2*(k-1)+\sum_{i=3}^kn^2*(i-2)*cntcol\)

  • [模拟赛杂记]【树论】枚举长为 p 的路径 a->b,那么另一条路径分两类情况:

    1. 在 lca(a,b) 的子树内,这里不合法当且仅当 lca(c, d) 在 a->b 上,维护以每个节点为 lca 距离为 q 的路径个数,求树上前缀和+子树和即可。
    2. 在 lca(a, b) 的子树外,这时候不合法当且仅当 \((lca(a, b), fa[lca(a,b)])\) 在 c -> d 的路径上,树上差分维护。
  • [模拟赛杂记]【DP】考虑转化后答案是从(单调栈中选出若干个点的方案数 * 一个系数)^m,用斯特林转下降幂:\(\sum_j \sum_{i=0}^{k_i} {m \choose i} i! {k_i \choose j} = \sum_{i=0}^{m}{m\choose i}i!\sum_j{k_i\choose j}\),现在计算这个东西 \(\sum_j{k_i\choose j}\),考虑 DP,考虑按位枚举选多少个,转移有 \(f_{i,j} = \sum_{k=0}^{i-1}[val_k \gt val_i]2^{\sum_{c = k + 1}^{i-1}val_c\le val_i}\),线段树维护之。

  • [模拟赛杂记]【博弈论】发现当前序列相当于一个全 X 序列进行若干轮游戏的结果,所以从全X局面开始玩,因为填的是实数,所以每次必定可以改变序列的奇偶性,也就是奇偶性由最后一个操作的人决定,注意判断特殊情况即可。

  • [模拟赛杂记]【概期DP】设 \(E(x)\) 为从 \(x\) 走到零出度点的期望步数,有转移:\(E(x) = \sum_{val_y\lt val_x}\frac{1}{p_x}(E(y) + (x_x-x_y)^2+(y_x-y_y)^2)\),有单调性,前缀和维护之。

  • P3193 [HNOI2008] GT考试【KMP/矩阵优化】n 太大考虑从 m 入手,设 \(f_{i,j}\) 表示填完前 \(i\) 个数字匹配 \(j\) 位的方案数,答案是 \(\sum_{i=0}^{m-1}f_{n,i}\),转移可以考虑加一个字符后的状态:\(f_{i,j} = \sum_{k = 0}^mf_{i-1,k}\times g_{k,j}\),后面的 g 可以预处理,转移可以矩乘优化。

  • [模拟赛杂记]【DP/反射容斥】在前缀和数组上考虑,相当于是限制了极差,自然想到用最大值和最小值刻画状态,设 \(dp_{l,r}\) 为最小值 \(\ge l\), 最大值 \(\le r\) 的方案数,钦定最小值,容斥一下有答案为 \(\sum_{l}dp_{l,l+k-1} - dp_{l + 1, l + k}\),转移不好直接算,转化一下变成向上(选1)或向右(选0)走从 \((0,0)\) 走到 \((x, y)\) 的路径数,但是不能经过最大值最小值限制的两条直线(形如 \(y=x+b\)),考虑反射容斥快速计算 \(dp_{l, r}\) ,注意计算组合数的前缀和统一容斥。

  • [数据删除]【长链剖分】链的情况好处理,考虑长剖后处理每一条链,这样会算重(两个1在交点处会变成一个2),考虑合并把短链合到长链上,把所有的链在交点处合成一只大蛤蟆继续往上跳,差分统计答案即可,注意要加上所有蛤蟆都跳出去的贡献并减去最后的长链的贡献。

  • P4292 [WC2010] 重建计划【01分数规划/长链剖分/DP】二分后长剖优化DP,设 \(dp_{u,i}\) 表示从 \(u\) 出发的长为 \(i\) 的链的最大值,长剖优化,具体实现时用线段树维护一条长链,把 \(dp_{u,j}\) 存在线段树上 \([dfn_u,dfn_u+j]\) 的区间上,每次在重链上查询,把轻链暴力合并上去,因为每个节点只会在链顶上合并一次,所以复杂度是 \(O(n)\) 的,总复杂度 \(O(n\log^2 n)\)

  • [数据删除]【数数】降智瞬间,考虑把涂色转成对一个长为 n*m 的时间序列计数,那么合法的序列一定满足 \(i\gt j,px_i<px_j,py_i<py_j\),也就是两维都升序, \((nm)!\) 中两类都满足,定序相当于无序,所以是 \(\frac{(nm)!}{n!m!}\)

  • [数据删除]【数据结构】考虑差分数组上选两个不相连的数相当于选了四个数,选相连的相当于选了两个数,第一问的答案把差分数组正数的部分加起来即可,第二问在线段树上维护所有非零段的左端点,右端点,长度,pushup注意一下就行。

  • One Billion Shades of Grey【网络流】考虑简化版:只有两种颜色,一个简单的建模是每个点向左下连一条容量为 \(abs(col_1-col_2)\) 的边,每个边界点向源点/汇点(取决于颜色)连一条 inf 边,跑一边最小割即可,相当于是只在边界处贡献,考虑多种颜色,可以离散化后从小到大枚举相邻的两种颜色,这样差分传递一下就相当于是两种颜色做了贡献,但是暴力做是 \(O(n^5)\) 的,考虑到每个节点最多三个度,退流即可,复杂度 \(O(n^4)\)

  • [数据删除]【分治】静态区间复杂询问首选分治/静态区间最值相关考虑笛卡尔树,考虑到对于一个最大值所有的合法左端点/右端点都是一个前缀 or 后缀单调的形式,所以可以二分端点,在答案数组上差分统计。

  • Function Sum【拉格朗日插值】贡献是:

    \[\sum_{p=1}^k\sum_{x=1}^n\sum_{i=0}^{x-1}\sum_{j=i+1}^{n-x}{n-x\choose j}{x-1\choose i}(p-1)^{i}(k-p+1)^{x-i-1}(k-p)^j(p)^{n-x-j}p \]

    枚举每个位置和这个位置上填的数,枚举前面比它大的后面比他小的就有了,后面式子的次数是 \(n\),做前缀和相当于乘上 \(\frac{1}{1-x}\),次数 \(+1\),是一个 \(n + 1\) 次多项式,算出 \(n + 2\) 个点值拉插一下即可快速求出 \(k\) 处的点值。

  • Paths【数论】

    • 性质:贡献只有 1/2/3/0,分别是 case1:不互质。case2:互质且最小质因子乘积小于等于 n。case3:互质且最小质因子乘积大于 n,且最小质因子的二倍小于等于 n。case4:没有贡献。
    • case1:\(sum = \sum_{i=2}^n \varphi(i) - 1\)\(ans1 = {n - 1\choose 2}\)
    • case3:\(ans_2 = \sum_{m_i\in pr}\sum_{m_j \in pr}[2 m_i\le n][2m_j\le n][m_im_j\gt n][i⊥j]\),因为 \([m_im_j\gt n]\),所以互质的条件一定满足,处理前缀和即可。
    • case4:\(ans_3 = \sum_{m_i\in pr}\sum_{m_j\in pr}[2m_i\gt n\ or\ 2m_j\gt n\ or\ m_im_j \lt n]\),同 case3.
    • case2:容斥即可。
  • Boxes and Balls【DP/计数】假设给小球标号,那么相当于标号的序列是不变的(不能交换相同颜色),也就变成了求 \(k\) 步之内能构造出的序列个数,设构造出的序列前缀和为 \(s'\),原前缀和为 \(s\),那么变换代价是 \(|s_i-s_i'|\),这里就很方便 dp 了,设 \(dp_{i,j,k}\) 为前 \(i\) 位填 \(j\) 个 1,花费 \(k\) 的方案数,有转移 \(dp_{i,j,k} = dp_{i-1,j,k-|s_i-j|}+dp_{i-1,j-1,k-|s_i-j|}\),考虑到代价的实质是有多少个球挪到了后面,并且权值只有 0/1,每个球要想挪出去需要 \(i\) 步,根据等差数列求和公式,合法的转移点不会超过 \(\sqrt{n}\) 个,所以枚举 \(\sqrt n\) 位转移即可。

  • Intervals of Intervals【扫描线/双指针/二分】

    • 考虑一个子问题,给定若干条线段,多次询问在某个区间内的线段的并。扫描线解决,把所有的询问和线段都挂在右端点上,对于区间上每个点维护最后一条覆盖它的线段的编号,那么当前询问的答案就是有多少点的颜色在询问的区间内,这个过程可以 ODT 维护,因为下面二分的时候没有和二分量相关的,所以把所有的修改的影响存下来,只需要做一遍扫描线。
    • 对于原问题考虑二分,函数是 “有多少个区间的区间并大于等于mid”,check 函数可以双指针,因为以 \(R\) 为右端点的合法区间左端点是一段前缀,\(L\) 维护这个分界点的位置。考察所有的修改和查询,前缀加,单点查,而且所有的修改点都在查询点之后,可以用一个全局 tag + 差分代替树状数组做。注意最后可能选的段数多于 k 个,减掉即可。
  • The Fair Nut and Amusing Xor【转化/分块】按照膜 k 同余类分类,操作变成更改一个同余类的相邻两个位置,考虑设 \(c_{i} = (a_i\ xor\ a_{i-1})xor(b_i\ xor\ b_{i-1})\),那么某个位置不用操作一定是 \(c_i\) 的前缀 xor 是 0,操作一定是从第一个开始一个一个推,问题转化成单点改,全局 0 的个数,用分块维护一下即可,注意特判无解。

  • Cheap Robot 【kruscal重构树/最短路】这种带补给的最短路可以考虑 kruscal 重构树,先求出每个点到最近的补给点的距离 dis,从 0 向每个补给点连长度为 0 的边跑最短路即可。考虑 \(c - dis_u\ge lst_u \ge dis_u\),对于一条边 \((u,v,w)\),有 \(c - dis_v\ge lst_u - w \ge dis_v \to c - dis_u - w\ge dis_v\to c \ge dis_u+dis_v+w\),也就是说每条边限制了一个下界,要求最大值最小,最小 kruscal 重构树求之。

  • Frog Fights【模拟】考虑优化暴力,因为每次移动后除了移动的那个青蛙及其旁边的之外的青蛙撞到前面的时间都是一样的,用一个小根堆维护他们撞到一起的时间,因为当前移动的青蛙的速度和位置都变化了,和之前的时间不同步,这里直接减去它的操作时间即可。

  • P4872 OIer们的东方梦【模拟】注意传送最多用三次,楼观剑可以不要,楼观剑可以砍墙。

  • Niyaz and Small Degrees【DP/反悔贪心】设 \(dp_{x,0/1}\) 表示子树全合法,父亲边删/不删的最小权值,转移时从子树里选出 \(deg_x - lim\) 个最小的点即可,复杂度 \(O(n^2\log n)\)。考虑优化,注意到一些已经度数 \(\le lim\) 的点贡献只能是一条边的贡献,考虑把这些贡献加入所有与它连通的点的候选集合内,这样每次 DP 的复杂度是 \(O(\sum_{i}deg_i) = O(n)\) 的,实现起来的话需要维护一个带撤的堆,因为 DP 过程中可能把一些还没有删到合法的点加入候选集合,DP 结束后需要还原状态。

  • Scaygerboss【网络流】二分答案,对所有起点终点建点,所有格点建点并拆点,限制 1 的流量,判断走最短路是否能走到格点来建边,有一个加强版是对于 lim = 1 ~ n 都求出答案,直接求复杂度上天,可以对时间排序后动态加边,用一个bitset模拟推流。

  • Cyclic Cipher【数论/尺取】考虑一个不考虑移动前值相同的子区间合法的充要条件是 \(x\equiv a (mod\ m)\),合并两个式子 \(a_2+k_2m_2 = a_1 + k_1m_1 \to a_1 - a_2 = k_1m_1 - k_2m_2\) 根据裴蜀定理,这个式子成立的充要条件是 \(gcd(m_1,m_2) | (a_1 - a_2)\) ,可以先尺取出不考虑移动的合法区间,在此之上继续尺取得到所有的合法区间,因为 m 只有 40,可以开桶存下暴力判断 ,复杂度 \(O(40n)\)

  • P3565 [POI2014] HOT-Hotels【树形DP】支持 \(n^2\),注意到答案相当于是在以每个点为根的子树里找到三个不在同一个子树内的点使得他们到根的距离相同,枚举根+处理深度,统计答案,复杂度 \(O(n^2)\),可以DP+长剖优化到 \(O(n)\)

  • #540. 「LibreOJ NOIP Round【构造】从完全图的部分分考虑,发现给出的上界非常宽松,考虑把一张图拆成若干完全图,每个完全图贡献是 \(n \choose 3\),因为 \(3\choose 3\)\(1\),存在唯一分解,所以一定能构造出解,打张表出来,根据值判断 \(3\) 选不超过 \(3\) 个,四选不超过 \(3\) 个,依次类推,构造合法。

  • P3622 [APIO2007] 动物园【DP】发现每个人的区间非常小,状压之。设 \(f_{i,s}\) 表示到第 \(i\) 个人往后数 5 个状态为 \(s\) 的最大价值,预处理出 \(w_{i,s}\) 表示第 \(i\) 个人的区间状态为 \(s\) 有多少贡献,有 \(f_{i,s} = max\{f_{i-1,(s \& 15) << 1)},f_{i-1,(s \& 15) << 1 | 1}\} + w(i,s)\),因为限制不到前一个人的第一个位置,所以枚举一下。环处理直接枚举开始状态并断环,保持末尾状态和开始状态一致。

  • P3396 哈希冲突 【根号分治】数组大小差1,100->0可还行。考虑到如果 \(p \gt \sqrt n\) 的话,暴力跳最多 \(\sqrt n\) 次,小于 \(\sqrt n\) 的部分可以预处理,复杂度 \(O(m\sqrt n)\)

  • P8123 [BalticOI 2021 Day1]【可持久化线段树合并】太蒟了,不会点分。先说可持久化的线段树合并怎么做,对于单点插入同主席树,合并时将两棵树合并到一棵新树上,具体到代码就是每层合并的时候tot++。回到这道题,操作二是经典的集合操作,因为不能对之前的节点有影响,所以用可持久化线段树合并。对于操作三,实际上是把合并时间作为边权的树上经过的边权单调递增总共能到达多少节点,考虑倒序操作,维护的信息变成每个元素能有多少个集合可达,但是这样只有在加入所有点后才能回答询问,加入所有点之前的询问都被盖掉了,所以维护的信息变一下:维护每个时间有多少元素加入集合,这样答案就变成了一个前缀和,就可以回答力。

  • P7115 [NOIP2020] 移球游戏【构造】好题,n = 2 是平凡的,称一次移球操作 a(x)->b(c) 为 a 中 c 个颜色为 x 的球移入 b,设有三个栈 a, b, empty,两种颜色 0/1,a 中有 c 个 1,一种可行的移球方案是:

    • b -> empty(c);
    • a(0)->empty(m - c), a(1)->b(c);
    • empty->a(m - c);b->a(c);
    • empty->b(c);
    • a ->empty(c);
    • b(1)->a,b->empty;
    • empty = b;

    考虑多种颜色,不难想到可以分治处理,把颜色按 mid 分类重复 n = 2 的构造,复杂度 \(O(nm\log n)\) 可过。

  • P8866 [NOIP2022] 喵了个喵【ad-hoc】神秘题,考虑 k = 2n - 2 时,极限刚好每个栈塞两个不同元素,那么所有的颜色都可以通过 1.放入空栈,栈底相消 2.放入栈顶,栈顶相消。考虑 k = 2n - 1 时多了一个球,肯定要把它先放到一个栈里,但是放到哪里得继续讨论:设孤儿颜色为 x,牌堆里第一个在栈底的元素为 y,y所在的栈为 P,P 的栈顶元素为 w。

    • 若 x = y,把 x 放入P,y 放入空栈,栈底相消,状态不变。
    • 若 x \(\not=\) y 且 w 在 x~y 之间出现了奇数次,把 x 放入空栈,最后一个 w 放到空栈里,两个 y 相消,空栈变成 P。
    • 若 x \(\not=\) y 且 w 在 x~y 之间出现了偶数次,把 x 放入 P,w 在空栈中消尽,y 和 P 的栈底相消,状态不变。

    模拟这几种情况即可。

  • Caramel Clouds【分讨】怎么这么多分讨题。下面的”区间“和”线段“是一个东西。容易想到二分,需要求出”到某个点的前缀可放置位置的最大个数“,并且只有线段的端点,考虑这个东西有两部分构成:没被覆盖的(设为 \(a\))+可以通过删除得到的(设为 \(X\)),因为最多只能删两个,所以情况是非常有限的,分讨一下:

    为了方便先声明几个变量,\(f_i\):只被线段 \(i\) 覆盖的长度,\(r_{i,j}\):只被线段 \(i,j\) 覆盖的长度(是 \(O(n)\) 级别的,可以直接 map 存),\(g_i\):满足 \(c_i+c_j\le W\) 的最大的 \(f_j+r_{i,j}\)

    • 没有区间覆盖它:直接计入答案 \(a + len \to a\)
    • 有一个区间覆盖它:\(f_i + len \to f_i\)\(f_i+g_i\to X\)\(\max_{c_i+c_j\le W}(f_i+f_j) \to X\)
    • 有两个区间(设为 \(i, j\))覆盖它且 \(c_i + c_j \le W\)
      • 两个区间没有交集:\((f_i+f_j)\to X\)
      • 两个区间有交集:\(f_j + r_{i,j} \to g_i\)\(f_i+g_i\to X\)
    • 有三个以上区间覆盖不可能有贡献,直接跳。

    可以用扫描线的思路维护一个区间被多少线段覆盖,即在左端点处加入,右端点处删除。线段树维护 \(max(f)\) 用作询问。

  • P7610 [THUPC2021] 群星连结 怎么这几天的题都这么神秘。**大模拟,注意 buff 分两类处理,一类延迟一类即刻生效,以及具体的结束时间。注意真伤和普通伤害。注意魔力回复。注意 10 ban 全场技能(包括对面)。

  • Kuroni the Private Tutor【网络流/贪心/线性规划/二分】好题。云剪贴板

  • P7011 [CERC2013] Escape【DP/贪心】考虑设 \(f_{u,i}\) 为以 \(i\) 的血量进入 \(u\) 能获得的额外血量,不好转移(合并复杂度高),比较牛的一个想法是把贡献拆成若干二元组 \((x,y)\) 表示以 \(x\) 的血量进入能获得 \(y\) 的额外血量,这样 \(f_{u,i}\) 既可以稍微处理一下得出,令 \(now = i\),若 \(now \ge x\)\(now +y\to now\)。合并子树可以直接合,对于当前根的贡献分讨一下:

    • \(a_u\ge 0\):插入 \((0,a_u)\) 即可。
    • \(a_v \lt 0\):设 \(Hp = -a_u,ext = a_u\),取出限制最小的二元组 \((x,y)\),若满足 \(Hp\ge x\ or\ ext \lt 0\) 则令\(max(Hp,x-ext)\to Hp\)\(ext + y \to ext\)。因为这道题里可以拿的一定不会扔,如果当前贡献是负的一定不会拿。

    堆启发式合并维护一下即可。下次碰到这种问题先别考虑复杂度,一定要把状态刻画完全。

  • [数据删除]【逆序对】区间逆序对,但是值域只有 \(50\),考虑容斥,用区间内的点向右得到的贡献减去 \(\gt r\) 的,用前缀和维护一下就行,记得开longlong。

  • [数据删除]【DP】抽象题,设 \(dp[i][0/1]\) 表示填完了 \([1,i]\)\(i\) 位于左端点/右端点的最小步数,下一个合法的转移点是不在 \(i\) 统治区间内的最小的数,用线段树维护一下区间最小值即可。

  • [数据删除]【贪心/构造】考虑贡献形如一个阶梯形的时候是最优的,构造方案是从最大值开始每次填 k 个。

  • [数据删除]【网络流】加入三个点 add,mul,mod用于传递关系。

  • Gregor and the Two Painters【二维数点】很经典的思想,考虑给每个连通块找一个值最小的节点作为代表节点,转化为对代表节点计数。一个节点要想成为代表节点当且仅当它不能到达四个方向上比它更小的节点,也就是说这四条路径上有大于 x 的节点,限制写出来是二维数点的形式,扫描线+树状数组即可。

  • P4383 [八省联考 2018] 林克卡特树【wqs二分】学习一下相关技术。考虑断边会出现若干连通块,块内的最优解是最长链,连边的操作刚好将他们穿成一条链,所以原问题转化成从树上选恰好 \(k + 1\) 条链,最大化权值和。这是经典的 DP 问题,设 \(dp_{i,j,0/1/2}\) 表示以 \(i\) 为根的子树内选了 \(j\) 条链,其中根 不在链上/是链的端点/是链上的非端点,转移是平凡的,复杂度 \(O(nk^2)\)。感性理解一下发现选 \(j\) 条链的最大值 \(f(j)\) 是一个上凸函数,于是可以 wqs 二分。因为 \(f(j)\) 是一个上凸函数,所以斜率越小切点的横坐标越大,可以二分斜率后快速找到切点,一个切点 \((x,ax+b)\) 的含义是选了 \(x\) 条链,最大的权值是 \(b\),那把凸包向下平移 \(mx\) 后得到的切点的值就是原问题的一组解,这样就去掉了恰好选 \(k\) 个的限制。感性理解下相当于是每多选一个就有一个附加权值 \(a\),这样求出的最优解就是在选 xx 个限制下的最优解。

  • P5633 最小度限制生成树【wqs二分】容易发现函数 \(f(x)\):编号为 \(s\) 的节点恰好连了 \(x\) 条边是上凸的,柯以wqs 二分,注意判断无解。

  • [模拟赛杂记]【可并堆/启发式合并】操作很适合可并堆,但是我用启发式合并双 log 艹过去了。对每个并查集开一个 set 维护集合,启发式合并即可。

  • [模拟赛杂记]【构造】因为没有相邻的 \(X\),直接一行填 1 一行填 4 即可。

  • [模拟赛杂记]【线段树/珂朵莉树】原题,用类似最大子段和的思路维护即可。也柯以用 ODT 爆艹。

  • [模拟赛杂记]【ACAM/矩阵优化】很板的题,但是减时赛最后看到这个题,没写完。设 \(dp_{i,j}\) 表示走到了 \(i\),填了 \(j\) 个单词,有转移 \(dp_{trans_{i,k},j+1} = \max(dp{trans_{i,k},j+1},dp_{i,j}+Endval[trans_{i,k}])\),是一个广义矩乘的形式,优化一下即可。

  • [数据删除]【搜索】原题++,注意之前走过的点不能 ban 即可。

  • [数据删除]【基环树】考虑改一条边 \((u,v,w) \to (u,v,w')\)的影响:

    • 不在环上:

      • 删掉原边:\(ans -1+[cnt_{u,w}\gt1]+[cnt_{v,w}\gt1] \to ans\)
      • 加上新边:\(ans+1-[cnt_{u,w'}\ge1]-[cnt_{v,w'}\ge1]\to ans\)
    • 在环上:

      • 在不满足环上所有边颜色都为w时删除原边有贡献。
      • 在不满足环上所有边颜色都为w'时加上新边有贡献。

      注意初始答案 = 所有点出边颜色数 - 1 之和 + [环上颜色都一样]

  • [数据删除]【构造】考虑每次删掉一个包含三种颜色的角,直到某个颜色只剩下一个,由这个点向其他所有点连边即可。因为每对相邻的节点颜色不一样,所以一定有解。

  • P6156 简单题【莫反】

    分析一下可知 \(f=\mu^2\)

    \[\begin{split} &\sum_{i=1}^n\sum_{j=1}^n(i + j)^k\mu^2(\gcd(i,j))\gcd(i,j)\\ &=\sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[\gcd(i,j) == 1](i + j)^k\\ &= \sum_{d=1}^n\mu^2(d)d^{k+1}\sum_{t=1}^{\lfloor\frac{n}{d}\rfloor}\mu(t)t^k\sum_{i=1}^{\lfloor\frac{n}{dt}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{dt}\rfloor}(i+j)^k\\ & (T=dt,g(x) = \sum_{i=1}^n\sum_{j=1}^x(i+j)^k)\\ &=\sum_{T=1}^ng(\lfloor\frac{n}{T}\rfloor)\sum_{d|T}T^{k}d\mu^2(d)\mu(\lfloor\frac{T}{d}\rfloor) \end{split} \]

    \(f(x) = \sum_{d|x}d\mu^2(d)\mu(\lfloor\frac{x}{d}\rfloor)\),先求 \(g(x)\),设 \(F(x) = \sum_{i=1}^x\sum_{j=1}^ij^k\),则 \(g(x) = F(2x)-2F(x)\)

    再求 \(f(x)\) ,积性函数的迪利克雷前缀和还是奇性函数,可以线筛求,处理下特殊点的点值 \(f(1) = 1\)\(f(p) = -1+p\)\(f(p^2) = f(p)\times(-p)\),当指数大于 \(2\) 时值均为 \(0\),因为有平方因子。

  • [ARC074E] RGB Sequence【计数DP】一种新思路,不考虑避免计算非法方案,而是在 DP 的过程中及时去掉非法方案,设 \(dp_{i,j,k}\) 表示当前填到了第 \(i\) 位,之前第一个不同颜色的位置是 \(j\),第二个不同颜色的位置是 \(k\),则 \(dp_{i,j,k}\to dp_{i + 1, j,k},dp_{i+1,i,k},dp_{i+1,i,j}\),考虑不合法的情况分三种,\(x=1 \And j\ge l\)\(x=2\And(j\lt l\ ||\ k \ge l)\)\(x = 3 \And k\lt l\),每次更新前清掉即可。

  • P3644 [APIO2015] 八邻旁之桥【结论】有个结论:\(\sum_{i\in A}|i-d|\),当 \(d\) 取到 \(A\) 的中位数时得到最小值,即 k = 1 的答案,k = 2 考虑枚举断点,左右都是 \(k = 1\) 的 case,用对顶堆维护一下前后缀中位数即可(自造数据退火好多分)。

  • P2042 [NOI2005] 维护数列【平衡树】板题,把最大子段和那一套挪到平衡树上就行,很educational 的一点是维护平衡树的时候需要加上当前根的值。好像一直在挂

  • P6394 樱花,还有你【DP】普及题,\(dp_{i,j}\) 表示前 \(i\) 个取 \(j\) 个的方案数,\(dp_{i,j} = \sum_{k=0}^{min(s_i,j)}dp_{i-1,j-k}\)。容易用前缀和维护,注意空间即可。

  • P5698 [CTSC1998] 算法复杂度【模拟】SB 题,可以转成中缀表达式算,会容易一点。

  • P4944 PION贪吃蛇【模拟】没啥好说的。

  • P8207 [THUPC2022 初赛] 最小公倍树【最小生成树】被普及题暴打的一天,考虑 \(lcm(i,j) = \frac{i\times j}{\gcd(i,j)}\),也就是说 gcd 越大贡献越小,枚举 gcd,连边 \(kd\to\lceil\frac{L}{d}\rceil\),还有 \(i\to L\) 保证有解。

  • P7077 [CSP-S2020] 函数调用【递推】考虑操作 3 构成了一张 DAG,而操作二可以转化为重复执行之前的所有操作(把初始化也视为操作),可以通过一遍拓扑排序求出所有操作的执行次数,一遍拓扑排序求出总的增量,就完了。

  • P7114 [NOIP2020] 字符串匹配【字符串】枚举\((AB)^i\),一个考虑一个前缀合法当且仅当它的最小周期整除 \(|(AB)^i|\),预处理一下出现过奇数个字符的前后缀数量统计一下即可。

  • [数据删除]【DP】好题,因为魔法阵可以不动,所以要 Floyd 预处理最小的法力消耗值,最终的高度一定是和某个点的初始高度一样的,有一个显然的状态是 \(dp_{l,r,k}\) 表示\([l,r]\) 高度全为 \(k\) ,复杂度 \(O(n^5)\),考虑砍掉最后一维,一个非常妙的状态是设 \(dp_{l,r}\) 表示 \((l,r)\) 这个区间内前一段高度是 \(s_l\),后一段是 \(s_r\),这样设左右端点为 \((0,n+1)\) 就可以枚举高度直接统计答案了,转移也是枚举断点直接转就好。

  • [数据删除]【树论】考虑所有点一定都会先走到 \(n\),所以定 \(n\) 为根,这样答案就变成了 \(ans[n]+dis(x,n)-dlt(x)\),考虑到一个节点的子树内有比它更大的节点那他一定不会有贡献,把子树内没有比其更大的点的节点拿出来构成一个序列 \(A\),那 \(ans[n] = \sum_{i} dis(A_i,A_i+1)\),考虑求出增量 \(dlt(x)\),因为最开始会走的一段路是一条到根的路径,一个思路是从根开始每经过一个序列中的点就把它删掉,贡献是 \(dis(pre_x,nxt_x)-dis(x,pre_x)-dis(x,nxt_x)\)

  • P7962 [NOIP2021] 方差【退火?】我直接打表+退火,考场策略题了。首先要看出来操作的实质是交换差分,打个表发现最优的时候差分数组是单谷的,直接退火就行了。

  • P8170 [eJOI2021] Waterfront【贪心】一个显然错误的思路是先长 m 天,然后从最大的开始删,这样错在可能某一天没长到 x,所以维护每个节点被砍了几刀,这样下一个能砍的时间可以算出来,用两个队列维护即可。

  • Hanging Hearts【树形DP】我是sb,我推结论。设 \(dp[x]\) 表示 \(x\) 子树内的答案,转移有两种 \(\sum_{y\in son_x}dp_y\)\(mxlen_y,y\in son_x\)

  • P7078 [CSP-S2020] 贪吃蛇【ad-hoc】所有吃完后的蛇一定比上一条吃完的蛇短,考虑一条蛇如果吃完后不是最弱的那一定吃,如果是最弱的取决于之后蛇的表现,若这条“最弱链”有偶数个蛇则不吃,否则吃。

  • P7961 [NOIP2021] 数列【数位DP】简单题,但是卡了。设 \(dp[i][j][k][p]\) 表示填了前 \(i\) 位,确定了 \(j\)\(a\),共有 \(k\)\(1\),前一位进了 \(p\) 位,转移有 :

    \[dp[i][j][k][p]\times {n - j \choose t}val^t[i] \to dp[i+1][j + t][k + (p + t) \% 2][\lfloor\frac{p+t}{2}\rfloor] \]

    鉴定为:适合刷表。

  • [模拟赛杂记] A:上界不超过 \(256^2-256\),无解用裴蜀定理判;B:可以求出相邻两个之间能走到的上下界,直接修改下界可以好写一点;C:最小斯坦纳树板子;D:区间 dp,若枚举的中转点被完全包含则产生 \(t^2\) 的贡献,能填一列里肯定不分开。

  • P3543 [POI2012] WYR-Leveling Ground【数论】经典差分转成单点改,然后发现这个东西能写成 \(ax+by=c\) 的形式,\(exgcd\) 求之,最优解只在四个边界处取,但是这样可能不满足均为零的限制,考虑贪心的修改,能证明最多修改 \(O(n)\) 次。

  • P7916 [CSP-S 2021] 交通规划【平面图&&对偶图】最小割的思路很显然,平面图转对偶图是常规思路,但是图真难建,考虑在不同颜色的附加点间建立虚点,一种虚点间匹配的方案能将黑白点分开,所以能 \(n^2\log n\) 求全源最短路后区间 DP。

  • [ABC326F] Robot Rotation【搜索】场上被这题背刺了,打到结束都没调出来,rating--。容易发现横纵坐标是独立的,那么分开双向搜索刚好能过,注意细节就行。

posted @ 2023-11-15 21:01  Kun_9  阅读(24)  评论(0编辑  收藏  举报