暴力版本:

 #include<bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long int ll;
const int maxn=1E4+;
const int inf=; ll A[maxn],B[maxn],tmp[maxn];
vector<ll>wait[maxn]; inline ll qpow(ll x,ll y)
{
ll ans=,base=x;
while(y)
{
if(y&)
ans=ans*base%mod;
base=base*base%mod;
y>>=;
}
return ans;
}
struct linear
{
vector<ll>val,a;
int fail[maxn],cnt;
ll delta[maxn];
inline void mul(ll*A,ll*B)
{
int k=a.size();
for(int i=;i<*k;++i)
tmp[i]=;
for(int i=;i<k;++i)
for(int j=;j<k;++j)
tmp[i+j]=(tmp[i+j]+A[i]*B[j])%mod;
for(int i=*k-;i>=k;--i)
for(int j=;j<k;++j)
tmp[i-j-]=(tmp[i-j-]+tmp[i]*a[j])%mod;
for(int i=;i<k;++i)
A[i]=tmp[i];
}
void qpowA(ll*A,ll*B,ll k)
{
while(k)
{
if(k&)
mul(A,B);
mul(B,B);
k>>=;
}
}
ll quickRecursion(ll n)
{
int k=a.size();
if(n<k)
return val[n];
for(int i=;i<k;++i)
A[i]=B[i]=;
A[]=;
B[]=;
qpowA(A,B,n);
ll ans=;
for(int i=;i<k;++i)
ans=(ans+A[i]*val[i])%mod;
return ans;
}
void BM()
{
cnt=;
for(int i=;i<(int)val.size();++i)
wait[i].clear();
for(int i=;i<(int)val.size();++i)
{
delta[i]=val[i];
for(int j=;j<(int)wait[cnt].size();++j)
delta[i]=(delta[i]-wait[cnt][j]*val[i-j-]%mod+mod)%mod;
if(delta[i]==)
continue;
fail[cnt]=i;
if(cnt==)
{
wait[++cnt].resize(i+);
continue;
}
int len=i-fail[cnt-]+wait[cnt-].size(),pos=cnt-;
for(int j=;j<cnt;++j)
if(i-fail[j]+(int)wait[j].size()<len)
len=i-fail[j]+wait[j].size(),pos=j;
ll g=delta[i]*qpow(delta[fail[pos]],mod-)%mod;
++cnt;
wait[cnt]=wait[cnt-];
while((int)wait[cnt].size()<len)
wait[cnt].push_back();
wait[cnt][i-fail[pos]-]=(wait[cnt][i-fail[pos]-]+g)%mod;
for(int j=;j<(int)wait[pos].size();++j)
wait[cnt][i-fail[pos]+j]=(wait[cnt][i-fail[pos]+j]-g*wait[pos][j]%mod+mod)%mod;
}
a.clear();
a=wait[cnt];
for(int i=;i<(int)a.size();++i)
cout<<a[i]<<" ";
cout<<endl;
}
}T;
int main()
{
ios::sync_with_stdio(false);
ll n,m;
cin>>n>>m;
for(int i=;i<=n;++i)
{
ll x;
cin>>x;
T.val.push_back(x);
}
T.BM();
cout<<T.quickRecursion(m)<<endl;
return ;
}

[模板]线性递推+BM的更多相关文章

  1. 模板 - 线性递推BM

    模数是998244353的话好像NTT可以更快. #include<bits/stdc++.h> using namespace std; typedef long long ll; co ...

  2. LG5487 【模板】线性递推+BM算法

    [模板]线性递推+BM算法 给出一个数列 \(P\) 从 \(0\) 开始的前 \(n\) 项,求序列 \(P\) 在\(\bmod~998244353\) 下的最短线性递推式,并在 \(\bmod~ ...

  3. 线性递推BM模板

    #include <cstdio> #include<iostream> #include <cstring> #include <cmath> #in ...

  4. Berlekamp Massey算法求线性递推式

    BM算法求求线性递推式   P5487 线性递推+BM算法   待AC.   Poor God Water   // 题目来源:ACM-ICPC 2018 焦作赛区网络预赛 题意   God Wate ...

  5. BM求线性递推模板(杜教版)

    BM求线性递推模板(杜教版) BM求线性递推是最近了解到的一个黑科技 如果一个数列.其能够通过线性递推而来 例如使用矩阵快速幂优化的 DP 大概都可以丢进去 则使用 BM 即可得到任意 N 项的数列元 ...

  6. 【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)

    这里所有的内容都将有关于一个线性递推: $f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k ...

  7. HDU - 6172:Array Challenge (BM线性递推)

    题意:给出,三个函数,h,b,a,然后T次询问,每次给出n,求sqrt(an); 思路:不会推,但是感觉a应该是线性的,这个时候我们就可以用BM线性递推,自己求出前几项,然后放到模板里,就可以求了. ...

  8. 2018 焦作网络赛 L Poor God Water ( AC自动机构造矩阵、BM求线性递推、手动构造矩阵、矩阵快速幂 )

    题目链接 题意 : 实际上可以转化一下题意 要求求出用三个不同元素的字符集例如 { 'A' .'B' .'C' } 构造出长度为 n 且不包含 AAA.BBB CCC.ACB BCA.CAC CBC ...

  9. 牛客多校第九场 A The power of Fibonacci 杜教bm解线性递推

    题意:计算斐波那契数列前n项和的m次方模1e9 题解: $F[i] – F[i-1] – F[i-2] = 0$ $F[i]^2 – 2 F[i-1]^2 – 2 F[i-2]^2 + F[i-3] ...

随机推荐

  1. Python程序执行顺序

    #示例代码基于py3.6 一直对Python程序的执行顺序有些疑惑,例如python程序是顺序执行的,那怎么还有main函数的出现呢? 在查阅了资料后,参见这里后,算是有点明白了: 1.python程 ...

  2. JVM内存结构探秘及编码实战

    了解JVM内存结构的目的 在Java的开发过程中,因为有JVM自动内存管理机制,不再需要像在C.C++开发那样手动释放对象的内存空间,不容易出现内存泄漏和内存溢出的问题.但是,正是由于把内存管理的权利 ...

  3. 优雅的使用BeanUtils对List集合的操作

    摘要 在业务员流程的时候,我们在Entity.Bo.Vo层数据间可能经常转换数据,Entity对应的是持久层数据结构(一般是数据库表的映射模型).Bo对应的是业务层操作的数据结构.Vo就是Contro ...

  4. 005jz2440开发板恢复出厂系统

  5. OpenSsl库 Rsa的简单使用

    环境的配置可以参考http://www.cnblogs.com/yangyquin/p/5284530.html 网络上传输的数据很容易被抓包,如果不加密,那么网络数 据很容易被窃取,诸如用户名.密码 ...

  6. 洛谷$P5366\ [SNOI2017]$遗失的答案 数论+$dp$

    正解:数论$dp$ 解题报告: 传送门$QwQ$ 考虑先质因数分解.所以$G$就相当于所有系数取$min$,$L$就相当于所有系数取$max$ 这时候考虑,因为数据范围是$1e8$,$1e8$内最多有 ...

  7. Pillow库来着

    第一步肯定是安装啦 pip install pillow 如果安装报错,可以升级一下pip库,因为有可能是pip版本低了......... pip show pip 升级用 python -m pip ...

  8. 《图解机器学习-杉山将著》读书笔记---CH4

    CH4 带有约束条件的最小二乘法 重点提炼 提出带有约束条件的最小二乘学习法的缘故:   左图中可见:一般的最小二乘学习法有个缺点----对于包含噪声的学习过程经常会过拟合 右图:有了空间约束之后,学 ...

  9. react 表单(受控组件和非受控组件)

    我们知道表单元素与其他的普通DOM元素来说是不一样的,它们保存了自己的一些状态. 我们主要说的就是表单元素中的受控组件和非受控组件. 受控组件就是这个组件的状态是我们(react)控制的,这个组件的行 ...

  10. java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...