OI
介值定理
若有连续函数,且不失一般性地,令,则对于任意实数,存在。
容易由实数完备性证明。直观理解,即可以画出一段连续曲线,其两端点分别为,而笔不离开纸面。
离散函数值上的介值定理
若存在函数,且满足,则对于,若有整数,存在一个。
证明显然。
在OI中的实际意义?
我们常遇到这样一类函数:在某些数列上进行统计,邻项函数值之间的差为,如括号序前缀和(),则可以通过上述性质判断某两点之间函数值是否存在。
例如CF1695C – Zero Path,本质上路径上数字和是一个满足上述条件的整数离散函数。
再例如CF1658F – Juju and Binary String,可以将题意转化为一个函数,且满足上述性质;同时有函数,则可以证明一定存在。
CodeForces Round #755 Div.2 F / Div.1 D Serious Business
此题整整困了我一天半,耗费了好几张草稿纸。实在走投无路,翻看题解,却发现正解曾经近在咫尺。有必要稍作整理。
考虑DP。
错误转移1
这道题与清理班次(《算法竞赛进阶指南》上的一道例题)过于相似,都是“给定一些段落,选择其中一些完整覆盖,求最小花费”的形式。记上述花费为。但本题与原题不一样之处在于其起点和终点是任意给定的。我的第一反应是枚举在位置从第行转到第行,利用数据结构维护所有,在转移到第二行,解锁到达的最小代价。对于各行前缀和,我们可以利用线段树或树状数组维护。同时我们也知道可以利用数据结构优化在的时间内,计算出对于一个固定的起点,所有的值。 (更多…)
被这玩意卡了一上午——前天CSP-S模拟的T4需要用到这类问题的转移。为什么题解TMD是错的?
即表示“每个位置有类元素可选,且序列中必须包含指定的类元素的,长度为的序列的个数”。形式化地讲,我们需要统计满足以下条件的序列的个数:。
通过容斥原理,我们可以计算出至少有个中的元素没有被包含在序列中的序列的个数,然后乘上容斥系数累加既是答案。也即:
。通俗地讲,我们在 个元素中选择 个,并强制使得它们不出现在序列中,其余元素任选。除去组合数的预处理时间,复杂度为。参阅AtCoder ABC 194 F – Digits Paradise in Hexadecimal,可以使用上述计算而非DP求解(虽然DP更加简洁直观)。
考虑一棵无根树的生成方式:需要决定一个好的顺序从而达到不重不漏地生成所有 个点的无根树。
类似有向无环图的拓扑排序,可以定义一种无根树的“拓扑排序”:每一轮将当前的叶子删去。这样可以很容易算出直径。设删除的轮数为 ,则当最终剩余一个孤点时,直径 ,否则直径 。为了生成无根树,我们考虑进行逆操作,在当前的树上加叶子。在此之前,为了不重不漏地对无根树进行表示,我们考虑如下的唯一表示方法:设 为节点 在添加叶子过程中第几轮被添加上树的。对于(也即同一层的节点),显然两棵有标号无根树同构但标号不同,当且仅当每个上述节点的叶子节点的标号集合不同。我们总是将 标号小的先行添加为其儿子。这样就不会出现因“两棵树本身同构,子节点编号集合相同导致重复计数的问题”。同时,为了方便、准确地计算,我们严格规定,新加入的 个叶子节点在新树上就是全部的叶子节点。也即在旧树上的所有叶子节点在新树上至少有一个儿子。 (更多…)
有集合,,则有。因此,若我们枚举集合,枚举集合的子集的子集做状压DP时,可以得到正确的复杂度而非错误的。参见AtCoder ABC 187 F – Close Group。
可以这样证明:考虑某个子集的子集,则中的每个元素有三种状态:,,。显然这样可以唯一表示,以及,对应了所有子集的拆分方案。故原式成立。
广义斐波那契数列
定义:任何形如的数列,称为广义斐波那契数列。
的斐波那契数列的通项公式
证明方法多样,可惜我都不会。知乎 – 斐波那契通项公式是怎样推导出来的?
下文中以代指斐波那契数列的第项,代表广义斐波那契数列的第项。