插值在OI中的应用 - Grice - 博客园

lagrange 插值笔记 - 洛谷专栏

P5850 calc加强版 - 洛谷

Problem - F - Codeforces

2025oifc2025.01.03 - 信友队

tyvj 1858 XLkxc - 黑暗爆炸 3453 - Virtual Judge

序列求和 V5 - 51Nod 1822 - Virtual Judge

Cowmpany Cowmpensation - 洛谷

Stranger Trees - 洛谷

Forest Fires - 洛谷

线性插值的伪代码

不妨设要插值的多项式为 \(f\).

  • 长为 \(L\) 的数组 \(Y,\text{ifac}\) 中,\(Y[i]\) 记录 \(f(i)\),\(\text{ifac}[i]\) 记录 \(\displaystyle \frac{1}{i!}\).
  • 函数 \(\text{calc}(x)\)
    • 如果 \(x\leq L\) 则

      • 返回 \(Y[x]\)
    • 声明长为 \(L\) 的数组 \(\text{pre},\text{suf}\)
    • 特别的,\(\text{pre}[0]\gets 1\)
    • 让 \(i\) 遍历 \((1,2,\dots,L)\)
      • \(\text{pre}[i]\gets (x-i)\times\text{pre}[i-1]\)
    • 特别的,\(\text{suf}[L+1]\gets 1\)
    • 让 \(i\) 遍历 \((L,L-1,\dots,1)\)
      • \(\text{suf}[i]\gets(x-i)\times\text{suf}[i+1]\)
    • 声明变量 \(\text{ans}\gets 0\)
    • 让 \(i\) 遍历 \((1,2,\dots,L)\)
      • 声明变量 \(\text{tmp}\gets Y[i]\times\text{ifac}[i-1]\times\text{ifac}[L-i]\times\text{pre}[i-1]\times\text{suf}[i+1]\)
      • 如果 \(i\) 为奇数,则
        • \(\text{ans}\gets\text{ans}-\text{tmp}\)
      • 否则
        • \(\text{ans}\gets\text{ans}+\text{tmp}\)
    • 返回 \(\text{ans}\)

calc

集训队互测的题。

P4463 [集训队互测 2012] calc - 洛谷

记录详情 - 洛谷

首先,令 \(a\) 升序,这样,算出答案后乘 \(n!\) 即可。

设 \(f_{i,j}\) 表示长为 \(i\) 的 \(a\) 序列,值域为 \([1,j]\),则答案为多少。则有转移

\[f_{i,j}=f_{i-1,j-1}\times j+f_{i,j-1}
\]

然后,不妨设 \(f_i(j)=f_{i,j}\),现在设法证明 \(f_i\) 是多项式。

容易发现,转移可以变形为

\[f_i(j)-f_i(j-1)=jf_{i-1}(j-1)
\]

这就说明 \(f_i\) 是多项式。

设 \(f_i\) 为 \(g_i\) 次多项式,则有

\[g_{i}-1=g_{i-1}+1
\]

\[g_n=2n
\]

于是就可以插值了。

注意:差分之后产生了额外的次数差!

The Sum of the k-th Powers

板子。

Problem - F - Codeforces

Submission #301678375 - Codeforces

The Sum of the k-th Powers - 洛谷

答案为

\[f(n)=\sum_{i=1}^ni^k
\]

实际上,\(f\) 是多项式。证明可以考虑累加法

为了线性做出这道题,要注意到

\[g(i)=i^k
\]

积性函数,所以,可以用欧拉筛求出 \(i\in [k+1]\) 的 \(i^k\) 值,复杂度 \(O(k+\pi(k)\log k)=O(k)\)。

然后,lagrange 插值求 \(f(n)\) 容易做到线性。

最终复杂度 \(O(k)\)。

tyvj 1858 XLkxc

纯纯插值题。

tyvj 1858 XLkxc - 黑暗爆炸 3453 - Virtual Judge

Source code - Virtual Judge

这是一个 \(O(k^2)\) 的 lagrange 插值做法。

非常经典的,

\[f(i)=1^k+2^k+\cdots+i^k
\]

中 \(f\) 是 \(k+1\) 次多项式。所以,可以 \(O(k)\) lagrange 插值求出 \(f\)。

\(g\) 的定义为

\[g(x)=\sum_{i=1}^xf(i)
\]

所以

\[g(x)=g(x-1)+f(x)
\]

变形得 \(f(x)=g(x)-g(x-1)\),说明 \(g(x)-g(x-1)\) 是关于 \(x\) 的 \(k+1\) 次多项式,所以 \(g\) 是 \(k+2\) 次多项式。

设函数 \(h\) 为(其中 \(a\) 和 \(d\) 为题目中所给出的)

\[h(x)=\sum_{i=1}^xg(a+(i-1)d)
\]

同理可得 \(h\) 为 \(k+3\) 次多项式。为了求出 \(h(n+1)\)(就是答案),我们要先求出

\[h(1),h(2),\dots,h(k+4)
\]

其中的每个都可以 \(O(k)\) 查询函数 \(g\) 得到,这部分复杂度为 \(O(k^2)\)。有了它们,我们就可以插值出函数 \(h\),就可以 \(O(k)\) 求得 \(h(n+1)\) 了。

时间复杂度 \(O(k^2)\)。

Cowmpany Cowmpensation

这题还有离散化相关计数 + 容斥做法。

Problem - 995F - Codeforces

Submission #301728957 - Codeforces

Cowmpany Cowmpensation - 洛谷

容斥做法 题解 CF995F 【Cowmpany Cowmpensation】 - 洛谷专栏

设 \(f[u][m]\) 表示仅考虑点 \(u\) 所在子树,点值域为 \([1,m]\) 时的答案。

转移为

\[f[u][j]=f[u][j-1]+\prod_{v \ \text{son of}\ u} f[v][j]
\]

发现 \(f[u][m]\) 为关于 \(m\) 的 \(n\) 次多项式,所以 lagrange 插值可做到 \(O(n^2)\)。

lagrange 插值做题记录的更多相关文章

  1. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  2. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  3. Sam做题记录

    Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...

  4. 退役IV次后做题记录

    退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...

  5. 退役III次后做题记录(扯淡)

    退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...

  6. 退役II次后做题记录

    退役II次后做题记录 感觉没啥好更的,咕. atcoder1219 历史研究 回滚莫队. [六省联考2017]组合数问题 我是傻逼 按照组合意义等价于\(nk\)个物品,选的物品\(\mod k\) ...

  7. BJOI做题记录

    BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...

  8. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

  9. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

  10. noip做题记录+挑战一句话题解?

    因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...

随机推荐

  1. el-upload上传文件 需要在请求之前加一个校验文件内容格式请求

    before-upload data(){ return { ... //判断是否需要做文件检查 checkFileFormat:false } }, beforeUpload(rawFile) { ...

  2. 怎么理解Condition

    原文出处: liuinsect 感谢文章作者@Jd刘锟洋 的投稿.如果其他朋友也希望自己的 Java 和 Android 技术文章发表在 ImportNew,可以微博私信联系@ImportNew,或者 ...

  3. PHP之JWT的token登录认证

    1.JWT简介 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证和信任,因为 ...

  4. Echarts 图例组件

    1.图例组件的基本介绍 图例组件legend展现了不同系列的标记(symbol),颜色和名字.可以通过点击图例控制哪些系列不显示. 2.开启图例组件 开启图例组件默认时关闭状态,通过配置legend字 ...

  5. 在C#中调用EVAL函数方法,通过字符串计算

    一.用 MSScriptControl 在 C# 中执行 JavaScript 代码   javascript 中有个eval方法,用过的人都知道他的方便和强大之处. 在C#中,我们也可以通过Com组 ...

  6. 实用干货分享(2) - Docker使用操作指南

    一.Docker安装部署 1. 安装仓库 执行以下命令,安装Docker所需的包.其中yum-utils提供yum-config-manager工具:device-mapper-persistent- ...

  7. 扩容ext4分区容量16TB限制

    #扩容ext4分区容量16TB限制 环境: 系统 ubuntu 16 resize2fs 1.42.13 (17-May-2015) 使用resize2fs扩容时如下提示 resize2fs /dev ...

  8. PySAGES结合CUDA SPONGE增强采样

    技术背景 在前面的一篇博客中,我们介绍过PySAGES这个增强采样软件的基本安装和使用方法.该软件类似于Plumed是一个外挂增强采样软件,但是PySAGES是基于Python语言和Jax框架来实现的 ...

  9. 【信号与系统】求使系统稳定的常数K的范围

  10. Qt数据库应用9-数据导出组件使用方法

    一.使用方法 1.1 第一步:引入组件 组件中所有代码文件是一个整体,不支持单个代码文件拆分使用,因为很多通用的方法都放在一个代码文件中,复用很多代码. datehead是本组件用到的头文件以及通用的 ...