luogu P4781 模板 拉格朗日插值

2022-05-09 10:57:17 字數 1227 閱讀 6131

嘟嘟嘟

本來以為拉格朗日插值是乙個很複雜的東西,今天學了一下才知道就是乙個公式……

我們都知道\(n\)個點\((x_i, y_i)\)可以確定唯一乙個最高次為\(n - 1\)的多項式,那麼現在我們已知這\(n\)個點,求這個多項式代入\(k\)時的值。

首先都能想到用高斯消元\(o(n ^3)\)求出多項式,然後代入\(k\)。

但是這樣有點慢,於是拉格朗日就找到了一種\(o(n ^2)\)的方法。

他不知怎麼的想出了這麼乙個式子:

\[f(k) = \sum_ ^ \prod_ \frac

\]然後就是\(o(n ^2)\)的啦。

至於正確性,我也不知道我這算不算證明,就是把\(k = x_t\)代入,會發現\(\sum\)中對於所有的\(i \neq x_t\)的項,都有乙個\((x_t - x_t)\)。所以其他項消了。然後對於\(i = x_t\)的項,化簡完後剛好等於\(y_t\)。

這題**

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define enter puts("")

#define space putchar(' ')

#define mem(a, x) memset(a, x, sizeof(a))

#define in inline

typedef long long ll;

typedef double db;

const int inf = 0x3f3f3f3f;

const db eps = 1e-8;

const int maxn = 2e3 + 5;

const ll mod = 998244353;

inline ll read()

inline void write(ll x)

int n, k;

struct node

t[maxn];

in ll quickpow(ll a, ll b)

in ll lagrange(int k)

ret = (ret + t[i].y * sum1 % mod * quickpow(sum2, mod - 2)) % mod;

} return ret;

}int main()

Luogu P4781 模板 拉格朗日插值

洛谷傳送門 這是一道模板題 由小學知識可知,n nn 個點 xi yi x i,y i xi y i 可以唯一地確定乙個多項式 現在,給定 n nn 個點,請你確定這個多項式,並將 k kk 代入求值 求出的值對 998244353 998244353 998244 353 取模 輸入格式 第一行兩...

Luogu P4781 模板 拉格朗日插值

洛谷傳送門 板題 注意一下求多個數的乘積的逆元不要乙個個快速冪求逆元,那樣很慢,時間複雜度就是o n 2log o n 2log 直接先乘起來最後求一次逆元就行了.時間複雜度為o n log n2 o n2 o n log n2 o n2 這樣的拉格朗日插值是預處理o n 2 o n2 插入o n ...

P4781 模板 拉格朗日插值

拉格朗日插值是一種能夠根據n個點 x i,y i 求出對應多項式的方法 定義拉格朗日插值的基函式 l i 為 l i prod n fracy i 容易發現這個函式的特點就是當 x x i 時,y y i 其他時候 y 0 所以最後插值出來的多項式就是這n個基函式求和 恰好在每個 x i 處取到 y...