插值在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. CF2027D The Endspeaker (Hard Version) 题解

    题面 给你一个长度为 \(n\) 的数组 \(a\) 和一个长度为 \(m\) 的数组 \(b\) (所有 \(1 \le i < m\) 满足 \(b_i > b_{i+1}\) ).最 ...

  2. 高性能计算-openmp-多线程缓存一致性(9)

    1. 背景介绍 L1 L2 cache是单核独享,L3是多核共享.如果多线程访问共享一维数组的连续元素,先读入第一个线程的L1 缓存中,其他线程访问缓存不命中需要加载,并且数据的更改后,标记为脏数据, ...

  3. 使用缓存构建更快的 Web 应用程序

    使用 Java 缓存系统缓存频繁查看的数据 使用 Java 技术的 Web 开发人员可以使用缓存实用程序快速提升他们的应用程序的性能.Java 缓存系统(Java Caching System,JCS ...

  4. 四、FreeRTOS学习笔记-任务创建和删除

    FreeRTOS的任务创建和删除 1,任务创建和删除的API函数(熟悉) 任务的创建和删除本质就是调用FreeRTOS的API函数 一.任务创建 动态创建任务:任务的任务控制块以及任务的栈空间所需的内 ...

  5. golang之类型转换cast

    Go 语言作为强类型语言,在使用 Golang 开发项目时,经常会遇到类型转换的场景,整型之间可以直接转换,字节切片和字符串之间也可以直接转换. 但是,如果整型和字符串之间做类型转换,则需要使用 st ...

  6. python语言实现_通过端口转发实现跨网络(多网络之间)通信_science_network

    本文使用python语言实现了一个端口转发的程序,该程序可以实现多网络之间的信息通信,当然这里有个前提,那就是多个网络都在一台主机上有可以连通的端口. 之所以有这个编写代码的需求,是因为最近使用的sc ...

  7. ELASTICSEARCH 读写性能优化

    ELASTIC 写i性能优化 refresh translog flush refresh 优化 translog优化 flush 优化 读性能优化 shard 设置

  8. 自有Jar包生成Docker镜像

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

  9. std的map或者set中,比较浮点类型二维三维数据

    在map和set中,如果比较对象是二维或者三维数据,需要把二维三维数据的浮点数转换为比较精度. 如果比较精度是0.001,那么数据的精度也必须是0.001,不然会出现如下情况: 比较函数 struct ...

  10. NATS: 对依赖注入支持

    NuGet: NATS.Net 使用方法: serviceCollection.AddNats(); 在容器中添加了 2 个单例服务: NATS.Client.Core.NatsConnection ...