整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


Weblink

https://www.luogu.com.cn/problem/P5667

Problem

Solution

我们 O(n)O(n)O(n) 预处理一下式子中需要用到的多种阶乘,以及 m−n+im-n+im−n+i 的逆元 ,然后直接 NTT 即可。

注意细心多乘 1ll

Code

// Problem: P5667 拉格朗日插值2
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5667
// Memory Limit: 256 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int N = 1 << 19, p = 998244353, mod = 998244353, G = 3, GI = 332748118;int limit, L, RR[N];
int minv[N], inv[N], fact[N], infact[N], mfact[N], minfact[N];int qpow(int a, int b)
{int res = 1;while(b) {if(b & 1) res = 1ll * res * a % mod;a = 1ll * a * a % mod;b >>= 1;}return res % mod;
}void NTT(int *A, int type)
{for(int i = 0; i < limit; ++ i) if(i < RR[i])swap(A[i], A[RR[i]]);for(int mid = 1; mid < limit; mid <<= 1) {int wn = qpow(G, (mod - 1) / (mid * 2));if(type == -1) wn = qpow(wn, mod - 2);for(int len = mid << 1, pos = 0; pos < limit; pos += len) {int w = 1;for(int k = 0; k < mid; ++ k, w = (1ll * w * wn) % mod) {int x = A[pos + k], y = 1ll * w * A[pos + mid + k] % mod;A[pos + k] = (x + y) % mod;A[pos + k + mid] = (x - y + mod) % mod;}}}if(type == -1) {ll limit_inv = qpow(limit, mod - 2);for(int i = 0; i < limit; ++ i)A[i] = (A[i] * limit_inv) % mod;}
}void poly_mul(int *a, int *b, int deg)
{limit = 1, L = 0;while(limit <= deg) limit <<= 1, L ++ ;for(int i = 0; i < limit; ++ i) RR[i] = (RR[i >> 1] >> 1) | ((i & 1) << (L - 1));NTT(a, 1), NTT(b, 1);for(int i = 0; i < limit; ++ i)a[i] = 1ll * a[i] * b[i] % mod;NTT(a, -1);
}void init(int n, int m)
{fact[0] = infact[0] = mfact[0] = minfact[0] = 1;for(int i = 1; i <= 2 * n + 1; ++ i) {fact[i] = 1ll * fact[i - 1] * i % mod;mfact[i] = 1ll * mfact[i - 1] * (m - n + i - 1) % mod;}infact[2 * n + 1] = qpow(fact[2 * n + 1], mod - 2); minfact[2 * n + 1] = qpow(mfact[2 * n + 1], mod - 2);for(int i = 2 * n + 1; i; -- i) {infact[i - 1] = 1ll * infact[i] * i % mod;minfact[i - 1] = 1ll * minfact[i] * (m - n + i - 1) % mod;inv[i] = 1ll * infact[i] * fact[i - 1] % mod;minv[i] = 1ll * minfact[i] * mfact[i - 1] % mod;}minv[0] = 1;
}int n, m, a[N], b[N], c[N], f[N];int main()
{scanf("%d%d", &n, &m);init(n, m); for(int i = 0; i <= n; ++ i)scanf("%d", &f[i]);for(int i = 0; i <= n; ++ i) {a[i] = 1ll * f[i] * infact[i] % mod * infact[n - i] % mod;if((n - i) & 1) a[i] = mod - a[i]; }for(int i = 0; i <= 2 * n; ++ i)b[i] = minv[i + 1];poly_mul(a, b, n * 3);for(int i = n; i <= 2 * n; ++ i) { printf("%d ", 1ll * mfact[i + 1] * minfact[i - n] % mod * a[i] % mod);}return 0;
}

P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)相关推荐

  1. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  2. matlab全域基函数,多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]...

    全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见"计算基本理论". 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值 ...

  3. 拉格朗日插值_拉格朗日插值定理的理论基础

    缺失,几乎是不可避免的.只要做数据处理,不可避免的工作就是插值.而插值里面比较常用的方法之一就是拉格朗日插值法,这篇文章就跟大家讲讲拉格朗日插值的理论基础. 为什么需要进行插值 我们进行数据处理的理想 ...

  4. 拉格朗日插值和埃尔米特插值

    %% 2022-1-15拉格朗日插值法,Hermite插值 %生成插值节点 clc;clear all;close all; t=[0:2*pi/100:2*pi]; X=linspace(0,2*p ...

  5. 拉格朗日插值和牛顿插值的龙格现象

    文章目录 一.实验目的 二.实验设备信息 三.实验内容 (一)拉格朗日插值多项式 (二)牛顿插值多项式 四.实验步骤 (一)拉格朗日插值函数实现 (二)牛顿插值函数实现 (三)观察拉格朗日插值和牛顿插 ...

  6. 数学建模准备 插值(拉格朗日多项式插值,牛顿多项式插值,分段线性插值,分段三次样条插值,分段三次Hermite插值)

    文章目录 摘要(必看) 0 基础概念 什么是插值 插值用途 什么是拟合 插值和拟合的相同点 插值和拟合的不同点 1 常用的基本插值方法 1.1 多项式插值法 1.1.1 拉格朗日多项式插值法 多项式插 ...

  7. 插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值

    插值:求过已知有限个数据点的近似函数. 拟合:已知有限个数据点,求近似函数,不要求过已知数据点,只要求在某种意义下它在这些点上的总偏差最小. 插值和拟合都是要根据一组数据构造一个函数作为近似,由于近似 ...

  8. Matlab实现线性插值、抛物插值、牛顿插值、拉格朗日插值、分段抛物插值、分段线性插值

    目录 线性插值 原理 流程图 代码 抛物插值 原理 流程图 代码 拉格朗日插值 代码 牛顿插值 原理 代码 分段线性插值 代码 线性插值 原理 流程图 单个点的线性插值代码 X=[0.2 0.4]; ...

  9. 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明

    拉格朗日中值定理 https://www.bilibili.com/video/BV117411E7kx?from=search&seid=17921778669593975548 拉格朗日中 ...

最新文章

  1. jquery获取元素在文档中的位置信息以及滚动条位置(转)
  2. XenApp_XenDesktop_7.6实战篇之十五:StoreFront的配置
  3. UA MATH567 高维统计专题2 Low-rank矩阵及其估计1 Matrix Completion简介
  4. Leetcode-单调数列(896)
  5. Aop动态代理解决问题
  6. 正则表达式的一点说明
  7. 【转】正确认识动脉压力波形
  8. SDNU 1210.通话记录
  9. FRR BGP协议分析17 -- labeled-unicast
  10. 新增四则运算用户选择功能小程序
  11. X86服务器虚拟化技术CNware-WinServer
  12. Webservice接口之CXF框架及Axis框架
  13. 软件工程课程实验报告:实验五
  14. 概率论 方差公式_概率论复习:重要概念和公式
  15. 小程序报错提示Unexpected token in JSON at position
  16. C2039 Error: WriteHuge : is not a member of CFile
  17. jquery实现星星闪烁功能
  18. 有关wifi配置工具wpa_cli以及wpa_supplicant简单分析
  19. SQL查询(嵌套查询)
  20. Windows10下修改盘符

热门文章

  1. 如何评判一个深度学习框架?
  2. 假如计算机是中国人发明的,那代码应该这么写
  3. Altium Designer笔记2
  4. Eclipse搭建java分布式商城项目
  5. SpringMVC,针对不支持PUT、DELETE提交的游览器处理方式
  6. Android 网络编程系列(5)Volley 网络框架入门
  7. 米扑博客:总结分享 WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商...
  8. 面对不同用户,数据中心如何将服务做到极致
  9. Django中的Form
  10. EngineRoot是在哪里定义的?