zoukankan      html  css  js  c++  java
  • P4781 【模板】拉格朗日插值

    思路

    拉格朗日插值是一种能够根据n个点((x_i,y_i))求出对应多项式的方法
    定义拉格朗日插值的基函数(L(i))

    [L(i)=prod_{j=0,j ot=i}^nfrac{x-x_j}{x_i-x_j}y_i ]

    容易发现这个函数的特点就是当(x=x_i)时,(y=y_i),其他时候(y=0)
    所以最后插值出来的多项式就是这n个基函数求和(恰好在每个(x_i)处取到(y_i)

    [G(x)=sum_{i=0}^n L(i) ]

    然后没了
    还有重心拉格朗日插值之后再说

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define int long long
    using namespace std;
    const int MOD = 998244353;
    int pow(int a,int b){
        int ans=1;
        while(b){
            if(b&1)
                ans=(ans*a)%MOD;
            a=(a*a)%MOD;
            b>>=1;
        }
        return ans;
    }
    int n,k,x[2020],y[2020];
    signed main(){
        scanf("%d %d",&n,&k);
        for(int i=1;i<=n;i++){
            scanf("%d %d",&x[i],&y[i]);
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            int up=1,down=1;
            for(int j=1;j<=n;j++)
                if(i!=j){
                    up=up*(k-x[j]+MOD)%MOD;
                    down=down*(x[i]-x[j]+MOD)%MOD;
                }
            ans=(ans+up*y[i]%MOD*pow(down,MOD-2)%MOD+MOD)%MOD;
            // printf("%d
    ",ans);
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    DFS复习
    二叉搜索树专题
    二叉树路径问题
    二叉树LCA--leetcode236题
    二叉树创建与前、中、后序遍历
    leetCode--n数之和--哈希表/双指针
    leetCode--单词接龙--BFS
    vue-router简单实现
    Promise的简单实现
    闭包&作用域链&let
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10551739.html
Copyright © 2011-2022 走看看