插值在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. 20241120 校内模拟赛 T3 题解

    题目描述 给定一个数列 \(A\),数列的元素取值范围为 \([1,m]\). 请计算有多少个非空子区间满足以下条件:该区间内每个元素的出现次数都相同(没有出现的元素视为出现 \(0\) 次). 例如 ...

  2. Linux之新增硬盘,分区,挂载

    1.新增硬盘后, 查看当前磁盘信息 fdisk -l 可以看到除了当前的第一块硬盘(sda)外还有一块sdb的第二块硬盘(sdb),然后用命令: fdisk /dev/sdb  给第二块硬盘进行分区 ...

  3. rabbitmq-c与amqp扩展安装

    最近需要使用RabbitMQ进行消息队列处理 1.安装rabbitmq-c 在安装amqp之前需要先安装rabbitmq-c扩展 rabbitmq-c下载网址:https://github.com/a ...

  4. Blazor 组件库 BootstrapBlazor 中EditorForm组件介绍

    组件介绍 EditorForm 组件是一个非常实用的组件,当进行数据编辑时,仅需要将 Model 属性赋值即可. 绑定模型默认自动生成全部属性,可以通过设置 AutoGenerateAllItem 更 ...

  5. uniapp select组件

    1.前言 官方的picker组件不能禁用某个下拉项,所以就有了这个下拉组件 组件只适配了宽屏模式,效果参照element-ui的select组件 demo地址:lianlizhou / ep-sele ...

  6. Mac m1 安装 Homebrew

    Homebrew 是 Mac 的包管理器,类似于 Linux 中的 apt,Windows 中的 choco. 自从 M1 芯片发布,Homebrew 正在积极适配新架构,如今已经有了原生支持 ARM ...

  7. Flutter 收起键盘

    Flutter收起键盘 在根Widget中嵌套GestureDetector return GestureDetector( // 触摸收起键盘 behavior: HitTestBehavior.t ...

  8. 【XML】学习笔记第三章-namesapce

    目录 命名空间 命名空间概述 命名空间语法 命名空间的声明 命名空间作用域 对命名空间的使用 元素对命名空间的使用 属性对命名空间的使用 DTD对命名空间的支持 命名空间 命名空间概述 标记中出现了同 ...

  9. Mybatis Plus条件构造器condition动态判断优化

    ConditionQueryWrapper package com.common.util; import com.baomidou.mybatisplus.core.conditions.query ...

  10. 时间轮在 Netty , Kafka 中的设计与实现

    本文基于 Netty 4.1.112.Final , Kafka 3.9.0 版本进行讨论 在业务开发的场景中,我们经常会遇到很多定时任务的需求.比如,生成业务报表,周期性对账,同步数据,订单支付超时 ...