4725传送门
4726传送门
解析
代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){int ans=0;char ch=getchar();while(!isdigit(ch))ch=getchar();while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans;
}
typedef long long ll;
const int mod=998244353;
int n,lim,tim;
vector<int>A,B,pos,Inv;
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,a=mul(a,a))if(p&1)ret=mul(ret,a);return ret;}
inline void ntt(vector<int>&a,int type){for(ri i=0;i<lim;++i)if(i<pos[i])swap(a[i],a[pos[i]]);for(ri mid=1,wn,mult=(mod-1)/2,typ=type==1?3:(mod+1)/3;mid<lim;mid<<=1,mult>>=1){wn=ksm(typ,mult);for(ri j=0,len=mid<<1;j<lim;j+=len)for(ri w=1,a0,a1,k=0;k<mid;++k,w=mul(w,wn)){a0=a[j+k],a1=mul(w,a[j+k+mid]);a[j+k]=add(a0,a1),a[j+k+mid]=dec(a0,a1);}}if(type==-1)for(ri i=0,inv=ksm(lim,mod-2);i<lim;++i)a[i]=mul(a[i],inv);
}
inline void init(int up){lim=1,tim=0;while(lim<=up)lim<<=1,++tim;pos.resize(lim-1),pos[0]=0;for(ri i=0;i<lim;++i)pos[i]=(pos[i>>1]>>1)|((i&1)<<(tim-1));
}
struct poly{vector<int>a;inline int deg()const{return a.size()-1;}poly(int k,int x=0){a.resize(k+1),a[k]=x;}inline int&operator[](const int&k){return a[k];}inline const int&operator[](const int&k)const{return a[k];}inline poly extend(const int&k){poly ret=*this;return ret.a.resize(k+1),ret;}friend inline poly operator+(const poly&a,const poly&b){poly ret(max(a.deg(),b.deg()));for(ri i=0;i<=a.deg();++i)ret[i]=add(ret[i],a[i]);for(ri i=0;i<=b.deg();++i)ret[i]=add(ret[i],b[i]);return ret;}friend inline poly operator-(const poly&a,const poly&b){poly ret(max(a.deg(),b.deg()));for(ri i=0;i<=a.deg();++i)ret[i]=add(ret[i],a[i]);for(ri i=0;i<=b.deg();++i)ret[i]=dec(ret[i],b[i]);return ret;}friend inline poly operator*(const int&a,const poly&b){poly ret(b.deg());for(ri i=0;i<=b.deg();++i)ret[i]=mul(a,b[i]);return ret;}friend inline poly operator*(const poly&a,const poly&b){int n=a.deg(),m=b.deg();init(n+m),A.resize(lim),B.resize(lim);poly ret(lim-1);for(ri i=0;i<=n;++i)A[i]=a[i];for(ri i=0;i<=m;++i)B[i]=b[i];for(ri i=n+1;i<lim;++i)A[i]=0;for(ri i=m+1;i<lim;++i)B[i]=0;ntt(A,1),ntt(B,1);for(ri i=0;i<lim;++i)A[i]=mul(A[i],B[i]);return ntt(A,-1),ret.a=A,ret;}inline poly poly_inv(poly a,const int&k){a=a.extend(k);if(k==1)return poly(0,ksm(a[0],mod-2));poly f0=poly_inv(a,(k+1)>>1);return (2*f0-((f0*f0.extend(k))*a).extend(k)).extend(k);}inline poly poly_direv(poly  a){poly ret(a.deg()-1);for(ri i=0;i<=ret.deg();++i)ret[i]=mul(a[i+1],i+1);return ret;}inline poly poly_inter(poly a){poly ret(a.deg()+1);for(ri i=1;i<=ret.deg();++i)ret[i]=mul(Inv[i],a[i-1]);return ret;}inline poly poly_ln(poly a,int len){poly ret=a.poly_direv(a);return ret=ret*a.poly_inv(a,len),ret.poly_inter(ret);}inline poly poly_exp(poly a,const int&k){a=a.extend(k);if(k==1)return poly(0,1);poly f0=poly_exp(a,(k+1)>>1).extend(k);poly delt=a-poly_ln(f0,k);++delt[0];return (f0*delt).extend(k);}
};
int main(){n=read()-1;poly ans(n);for(ri i=0;i<=n;++i)ans[i]=read();int len=1;while(len<=n*2)len<<=1;Inv.resize(len),Inv[1]=1;for(ri i=2;i<len;++i)Inv[i]=mul(Inv[mod%i],mod-mod/i);ans=ans.poly_exp(ans,len);for(ri i=0;i<=n;++i)cout<<ans[i]<<' ';return 0;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/10367794.html

2019.01.01洛谷 P4725/P4726 多项式对数/指数函数(牛顿迭代)相关推荐

  1. c语言经典01背包问题——洛谷P2871

    动态规划中的经典题01背包 最近在练习动态规划希望自己能理解更透彻 输入样式: 4 6 1 4 2 6 3 12 2 7 输出样式: 23 我提交的代码: #include<stdio.h> ...

  2. 洛谷 P4725 【模板】多项式对数函数 ntt

    题目描述 给出 n−1n−1n-1 次多项式 A(x)A(x)A(x),求一个mod xnmodxnmod\ x^n 下的多项式 B(x)B(x)B(x) ,满足 B(x)≡lnA(x)B(x)≡ln ...

  3. 【洛谷】P1067 多项式输出【模拟】

    https://www.luogu.org/problemnew/show/1067 题目: 题目描述 一元 n 次多项式可用如下的表达式表示: 其中,aixi称为 i 次项,ai 称为 i 次项的系 ...

  4. [2019.3.21]洛谷P3640 [APIO2013]出题人

    突发奇想做一道非传统题... 只要发现这些算法的一些性质就好了: SSSP: FloydWarshall:稳定\(O(V^3)\) ModifiedDijkstra:正权图跑得贼快,负权图可能会被卡掉 ...

  5. 【CSP-S 2019】【洛谷P5664】Emiya 家今天的饭【dp】

    题目 题目链接:https://www.luogu.org/problem/P5664 Emiya 是个擅长做菜的高中生,他共掌握 nnn 种烹饪方法,且会使用 mmm 种主要食材做菜.为了方便叙述, ...

  6. 洛谷日报索引(2020、2019、2018)

    历年洛谷日报索引 2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https: ...

  7. 洛谷日报 2020年3月前索引

    2020 2019 2018 感觉洛谷日报全是干货!!!先记下来再说 2020 年洛谷日报索引 3 月 #260[dove]Church 编码(和 Lambda 演算) https://www.luo ...

  8. python刷题 NOI题库 python题解 洛谷、牛客网、AcWing 刷题等

    NOI题库 python题解-2022.01.07整理(1.1-1.3) NOI题库 python题解-2022.01.07整理(1.1-1.3)_dllglvzhenfeng的博客-CSDN博客 N ...

  9. 洛谷 4828 Nagisa loves Tomoya 题解

    博客观赏效果更佳](https://lightninguz2.github.io/2019/11/02/洛谷-4828-Nagisa-loves-Tomoya-题解/) 题意简述 给定一个序列aaa, ...

  10. 洛谷 刷题 深基部分题解(python版)-2022.01.29

    P5703 [深基2.例5]苹果采购(python3实现) https://blog.csdn.net/dllglvzhenfeng/article/details/122690555 P5703 [ ...

最新文章

  1. linux日程管理系统,Linux系统时间管理
  2. [Qt教程] 第27篇 XML(一)使用DOM读取XML文档
  3. SAP UI5 Mock server,为什么运行时无法返回 JSON 类型的测试数据?
  4. 一步步学习如何安装并使用SAP HANA Express Edition
  5. 浅谈基于TCP和UDP的协议设计
  6. JAVA入门级教学之(定义一个学生类)
  7. session过期返回登录页面跳出frame
  8. TypeError: softmax() got an unexpected keyword argument 'axis'
  9. std::atomic_thread_fence
  10. (41)zabbix监控api接口性能及可用性 天气预报api为例
  11. TP-Link C2和C20i产品出现命令注入、DoS等多个漏洞 绿盟科技发布安全威胁通告
  12. mac 批量更改文件后缀名
  13. 脉动风时程matlab程序,脉动风时程matlab程序.doc
  14. Java程序员的五个职业发展方向
  15. android 功能防抖,Android RxJava 实际应用讲解:功能防抖
  16. 无法卸载vue2.x提示up to date
  17. 网站页面代码优化的方法有哪些呢?
  18. 根据汉字获取它的字符串拼音首字母(大写),含多音字
  19. AR.js 学习笔记
  20. 电信、网通南北网络互通互联解决方案

热门文章

  1. android 编译c代码吗,在Android手机上编译C代码
  2. php smarty 后台,smarty后台文件常用方法及说明
  3. 装箱拆箱的意义 java_Java中的装箱和拆箱深入理解
  4. wordpress插件WP Rest API接口文档说明
  5. 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile
  6. PHP7.0,PHP7.1.x新特性
  7. Android 四大组件 之 BroadcastReceiver(广播接收者)
  8. 一篇真正教会你开发移动端页面的文章(二)
  9. 小D课堂 - 新版本微服务springcloud+Docker教程_3-02CAP理论知识
  10. ZOJ3953 Intervals