插值在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. TP5的项目能正常返回数据,但是状态码是500

    翻出来以前一个很老的TP5项目,忘记是什么功能系统了,就本地启动了一下,发现返回状态码500,开始以为是index.php被我隐藏后rewrite导致的,后来搜索了一下,发现大家也有这个问题,然后看到 ...

  2. ThreeJs-02Threejs开发入门与调试

    这两天没有上传笔记,在解决图床的问题,主打一个白嫖,所以要费点心思,先是用了gitee的图床好不容易配好后发现居然加了防盗链,后面又转了github的咱目前来说github也是最稳定且免费的,现在搞好 ...

  3. begin-预览,不行啊还是太弱了

    方便管理,主要是想熟悉下git的操作 先创建并且切换到一个新的分支: git commit --allow-empty -am "before starting PA1" git ...

  4. Thinkphp漏洞复现

    Thinkphp漏洞复现 环境均为vulhub/thinkphp Thinkphp是一种开源框架.是一个由国人开发的支持windows/Unix/Linux等服务器环境的轻量级PHP开发框架. 很多c ...

  5. Django之添加prometheus监控

    1.首先需要在prometheus.yml配置文件中配置targets: - job_name: "test-server-191" static_configs: - targe ...

  6. 销讯通CRM客户关系管理系统的功能拆分

    随着技术的发展,CRM系统(客户关系管理)成为企业不可或缺的工具,本文从医药行业角度简要谈谈CRM系统的功能. 从业务的理解来说,从医药行业来说,CRM客户管理系统的有以下几部分功能: 01 客户的分 ...

  7. 自有Jar包生成Docker镜像

    前言 经常会有些自己写的一些SpringBoot小项目,为了实现一些小的功能/需求,但是部署的时候,不管是生成jar包,还是war包部署到tomcat中,都容易因为需要部署的环境(比如java版本.t ...

  8. ProWindow的控制按钮状态

    在使用ArcGIS.Desktop.Framework.Controls.ProWindow时,有网友发现,设置窗口调整模式后,窗口的控制按钮是不全的. ProWindow win = new Pro ...

  9. chrome浏览器设置允许跨域

    前情 在访问测试搭建的测试环境的时候,发现接口因为跨域全部失败了,服务端又不想设置允许跨域,又急于使用,于是想到是不是可以使用跨域浏览器 放开chrome的跨域设置步骤 复制一个chrome快捷图标, ...

  10. JDK 19 对反应式编程的批判

    我们知道 JDK 19 引入了虚拟线程,实现了 JEP425 草案,https://openjdk.org/jeps/425 该案对反应式编程的批判可谓犀利: Improving scalabilit ...