zoukankan      html  css  js  c++  java
  • LG4781 「模板」拉格朗日插值 拉格朗日插值

    问题描述

    LG4781


    题解

    多项式点值转系数的方法。

    时间复杂度 (O(n^2)),要线性求逆。

    (n+1) 次多项式的拉格朗日插值式子:

    [F(k)=sumlimits_{i=0}^{n}{y_i imes prodlimits_{i eq j}{frac{k-x_j}{x_i-x_j}}} ]


    (mathrm{Code})

    #include<bits/stdc++.h>
    using namespace std;
    
    const int mod=998244353;
    const int maxn=2007;
    
    #define int long long
    
    int n,k;
    int X[maxn],Y[maxn];
    int F[maxn];
    
    long long ksm(long long x,int p){
    	long long res(1);
    //	x=((x%mod)+mod)%mod;
    	while(p){
    		if(p&1) res=res*x%mod;p>>=1;
    		x=x*x%mod;
    	}
    	return res;
    }
    
    void Init(void){
    	scanf("%lld%lld",&n,&k);
    	for(int i=0;i<n;i++){
    		scanf("%lld%lld",&X[i],&Y[i]);
    	}
    }
    
    void Work(void){
    	long long res(0);
    	for(int i=0;i<n;i++){
    		long long cnt(1);
    		for(int j=0;j<n;j++) if(i!=j) cnt=cnt*((X[i]+mod-X[j])%mod)%mod;
    		cnt=ksm(cnt,mod-2);
    		for(int j=0;j<n;j++) if(i!=j) cnt=cnt*((k-X[j]+mod)%mod)%mod;
    		cnt=cnt*Y[i]%mod;
    		res=(res+cnt)%mod;
    	}
    	printf("%lld
    ",res);
    }
    
    signed main(){
    	Init();
    	Work();
    	return 0;
    }
    
  • 相关阅读:
    JAVA面试——设计模式
    CSS清除浮动
    CSS外边距
    baidu-ife
    笔记一则
    Atom
    校园网认证
    四月甘九-省
    Python sys.argv[]用法
    Python模块导入的方法
  • 原文地址:https://www.cnblogs.com/liubainian/p/12113232.html
Copyright © 2011-2022 走看看