暴力版本:

 #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. BZOJ3527 推出卷积公式FFT求值

    BZOJ3527 推出卷积公式FFT求值 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 题意: \(F_{j}=\sum_{i&l ...

  2. 搭建个人/企业私有云盘-seafile

    一.安装依赖组件 安装前的准备工作安装 Seafile 服务器之前,请确认已安装以下软件MariaDB 或者 MySQL 服务器 (MariaDB 是 MySQL 的分支),python 2.7 (从 ...

  3. lumen 笔记一

    可以用config()函数和evn()函数来获取 .evn里面的配置内容 config('app.timezone') 获取配置config(['app.timezone' => 'China/ ...

  4. MFC_对话框_访问控件_7种方法_A

    访问对话框控件的七种方法 方法一. GetDlgItem()->GetWindowText(); GetDlgItem()->SetWindowText(); 方法二. GetDlgIte ...

  5. jquery $.post()返回数据

    javawe项目很多情况下需要通过$.post()进行前端和后端传递数据 格式是: $.post(url,data,function(result,statue){ alert(result); }, ...

  6. 洛谷p1119--灾难后重建(Floyd不仅仅是板子)

    问题描述 询问次数  5 000 00,   顶点数  200 怎么办? dijkstra?对不起,超时了/. 时间限制是1秒,询问5 000 00 ,每次dijsktra要跑n*n*logm 次,稳 ...

  7. Spring JDBC操作数据库示例

    1.所需jar包 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodi ...

  8. 【温故知新】Java web 开发(四)JSTL 与 JDBC 的增删改查

    本篇开始使用 jstl 这个 jsp 的标签库,在同一个 Servlet 中实现处理 CRUD 请求,以及使用 jdbc 数据库基本操作.然后你会发现 Servlet 和 jdbc 还是有很多不方便之 ...

  9. 【他山之石】mybatis打印sql日志 相关配置

    背景:mybatis的sql日志打印对我来说一直比较迷,哪怕看过网上很多博客后还是这样,这两天刚好又遇到了问题,要查sql不得已又来查阅,这次终于搞定了. mybatis是有提供日志功能支持的,目前支 ...

  10. 3.24 7.13 Python基础汇总

    对象类型 类型名称 示例 简要说明 备注 数字 int,float,complex 1234,3.14,1.3e5,3+4j 数字大小没有限制 十六进制用0x前缀和0-9,a-f表示 字符串 str ...