2024集训D1总结
集训D1总结
课堂内容
因为手记了笔记所以以记录理解为主
多项式求逆 ,Bostan-mori
有一个多项式 \(F(x)\) , 设
这样就可以递推出 ${g_n} $ .
这里其实展示出**封闭形式 **的一种意义 , 即在分析中把原来复杂的部分简化成有限项进行分析 , 然后再用适当的方式展开 .
Bostan-mori 同样是从处理后的多项式提取答案的一种手段 .
求:
这里因为 \(G(x)G^{-1}(x)\) 没有偶次项 , 用刚才的求逆也可以知道其逆也没有偶次向 .
所以可以把分子的多项式分为两部分 , 然后还原 \(x^2\to x\) , 就成功地把问题规模减少到一半 . 用FFT复杂度 \(O(nlog^2n)\) 暴力卷积也有 \(O(n^2logn)\) .
这种思路看起来相当普遍 , 分治问题 , 不断缩小问题规模直到可以简单处理的范围 . 这里我们只取一项 , 于是用乘一个 \(G^{-1}(x)\) 的方式让分母只保留偶次项 , 从而分割了分子 .
类似的思路还有 \(scaling\) 算法 , 用于处理 MCMF , 大致思路仍然是奇偶分治 , 把所有边写成 \(w=2k+(0/1)\) 的形式 , 把 \(0/1\) 的部分跑一次网络流 , 然后所有边都变为 \(w=2k\) 形式 , 提出一个系数\(2\) , 问题规模就缩小了一半 .
矩阵对角化, Caylay定理
去年集训时学会了这个 , 但是这一次有了更深刻一些的理解 .
**意义 **: 通过构造出 \(n\) 个特征向量 \(v_n\) , 满足矩阵 \(A\) 对 \(v\) 的变换是单纯的拉伸 ( 对 \(Av=\lambda v\) 的理解 )
从而 , 把要用 \(M\) 进行变换的向量映射到 \(v_n\) 上( \(Q\)) , 然后就变成了简单拉伸操作 (\(\Lambda\)) , 最后再还原回来 (\(Q^{-1}\)), 最后结果就是 \(Q\Lambda ^k Q^{-1}\) .
为了求解 \(v\) , 构造特征多项式 :
**用途 **:单纯的矩阵对角化没有意义 , 但是 caylay 定理提供了应用的方法 :
这允许我们用它来推导式子 .
待整理
容斥原理
更加本质的东西 : **减弱限制 ** , 所以把一些限制写成了子集枚举的形式 , 为了保证结果正确 , 需要给对应的子集分配容斥系数 , 目的是让每一部分带上我们希望的系数 .
而在这一过程中 , 可以利用生成函数维护卷积形式的系数 , 从而化简形式 .
例题agc058d待整理
反射容斥 卡特兰数就来自于反射容斥这一思想 . 不过卡特兰数讨论的是简单的情况 , 如果平面内有两条反射线 , 就会有更加复杂的情况:
P3266待整理
斯特林数
类比组合数的二项式系数 , 斯特林数则是上升幂 , 下降幂转化时的系数 .
换个角度 , 如果单纯从组合意义上研究一部分这方面的题 , 都是很智慧的题目 . 组合数学题关键还在观察性质 , 钦定 , 转化 .
练习情况
ABC241EX
题意
\(\{a_n,b_n\}\) 做大小为 \(m\) 的背包 , 每种方案权值是 \(\Pi a_i\) , 对所有权值加和 , 物品个数 \(b_i\) .
\(n=16,b=10^{17},m=10^{18}\)
题解
-
做法一 : 观察到\(m\)较大 , \(n\)较小 , 而且物品个数的限制不方便统计 . 这都指向了容斥 .
容斥的设计是容易的 , 问题变成如何统计没有个数限制下任意 \(m'\) 大小背包如何计算 .
一开始自己想到了一个插值做法 . 不过这道题有更好的做法 :
对于大范围 \(m=1e18\) , 可以联想到一种方法——数位dp . 我们尝试逐一确定每个 \(i\) 选择的个数的二进制位 . 同时为了保证和是 \(m'\) , 需要统一确定所有数的每一位 . 在每一位上有 \(2^n\) 种选择 .
这样就在无需生成函数的情况下完成了这道题 .
-
做法二 : **生成函数做法待整理 **
ABC221H
题意
给出 \(n,m\) , 对每个 \(k\) 求元素和为 \(n\) , 个数为 \(k\) , 相同元素个数不大于 \(m\) 的多重集个数 .
题解
事实上 , 这个问题是一种分拆数 问题 , 不考虑限制 , 转移为
组合意义上理解 , 就是把整个序列前加一个一 , 或者整体加一 . 这种巧妙的转移 , 抓住序列本身特性 , 实现了 \(O(1)\) 转移 .
而加上限制 , 发现不合法发生于前面恰好接了 \(m+1\) 个 \(1\) 的情况 , 于是转移为 :
当日总结
-
内容 : 这一天内容还是相当说明了计数问题的重要性和自己在这方面的欠缺 .
计数问题主要体现了综合的找性质和转化问题 , 包含了容斥,组合等等系统性的思路和生成函数这一强大的处理工具 .
-
其中基础的容斥等建立在对问题的转化上 , 找出关键问题 , 分解问题 .
除了学习系统想法之外 , 计数题更重视"自己创造算法" .
-
而生成函数截然相反 , 用强大的模型描述问题 , 然后在抽象模型基础上解决问题 .
抽象程度很高 , 而且非常依赖对于多项式相关知识的深刻理解 .因此仅仅学会算法本身远远不够 . 要通过养成用模型理解处理问题的实践来提高.
数学问题在知识本身门槛就很高 (比如生成函数) . 但灵活的思维和创造力更重要 .
关键词 : 思维 , 找性质 , 创造.
-
-
训练 : 调整心态的产物 , 要做好每一道题 , 而不是单纯追求在做题数上爬榜 . 专题这方面 , 应该先理解好每节课的 "那股劲" , 然后争取从每道题上得到收获 .
"第一次做" 很重要 , 不能轻易获取提示 , 通过这个过程考察自己的思路是如何生成出来的 .
做完题要总结 , 重点关注想题过程 , 回答 :
- 为什么这么做 ?
- 为什么不这么做 ?
- 为什么我想到了 ?
- 为什么我没想到 ?
只要认真做题 , 这都是可以在空余时间反思的 . 这样或许可以最大化第一次做一道题的收益 .
总而言之也许在集训后还需要至少一个月来完全消化好这一次的内容 .
-
心态与状态 : 尽可能屏蔽外界 . 尽可能去保证高度的专注 ,而不是被顾虑 , 焦虑等等干扰 . 完全可以用对具体题的反思代替其他想法 , 也更有意义 .
但是状态并不算太好 , 缺乏睡眠而且做完一趟火车 , 总感觉轻度的眩晕 (感觉陆地像是漂浮一样) . 保证睡眠很重要 , 再者要减少内耗了 , 相信自己能很好地调整过来 .
清理掉过于保守的思维习惯 , 不要用最劣情况预期一切问题 , 保持自信也是好状态的一部分 .