简单线性代数练习题
首先翻开具体数学生成函数一章,可以发现\(F(n),G(n)\)满足以下递推式

\[F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1\]
\[G(n)=4G(n-2)-G(n-4),G(2)=3,G(0)=1\]

我们发现\(G\)只有偶数项有值(证明的话可以把网格黑白染色什么的来证明)

那么我们可以设\(T(n)=G(2n)\)

那么\(T\)服从以下递推式

\[T(n)=4T(n-1)-T(n-2),T(1)=1,T(0)=1\]

那么我们发现\(F\)和\(G\)是两个二阶常系数线性递推数列

根据特征方程和生成函数那一套理论,我们可以知道\(F,T\)都有这样的通项公式

\[C×A^n+B×D^n\]

考虑题目让我们算什么

\[\sum_{i=1}^{n}{F(i) \choose k}\]

众所周知,组合数是个\(O(k)\)阶的多项式,那么我们现在的问题就变成了快速求

\[\sum_{i=1}^{n}F(i)^k\]

那么稍微画一下式子就是

\[\sum_{i=1}^{n}(CA^i+DB^i)^k\]

暴力二项式定理展开

\[\sum_{i=1}^{n}\sum_{j=0}^{k}C^{j}A^{ij}D^{k-j}B^{i(k-j)}\]

稍微交换一下求和号

\[\sum_{j=0}^{k}C^{j}D^{k-j}\sum_{i=1}^{n}(A^{j}B^{k-j})^i\]

后面显然是个等比数列求和,可以\(O(logn)\)的算出

那么这题就做完了,复杂度\(O(Tk^2logn)\)

注意当\(m=3\)的时候,你需要将输入的区间缩一下,因为询问的是\(G\)但是我们的做法只能处理\(T\)

另外你可能需要将输入的区间加加减减,因为我们的公式一般认为\(F(0)=1\)

下面是简单的线性代数内容,是关于如何解出\(A,B,C,D\)的

对于F显然是fib数列的通项公式,你应该熟练的背过它

\[A=\frac{\sqrt{5}+1}{2}\]

\[B=\frac{\sqrt{5}-1}{2}\]

\[C=\frac{\sqrt{5}}{5}\]

\[D=-\frac{\sqrt{5}}{5}\]

对于\(T\)稍微解一下特征方程可以得到

\[A=2+\sqrt{3}\]

\[B=2-\sqrt{3}\]

那么我们令\(T(1)=1,T(2)=1\),就可以通过待定系数法解出\(C,D\)来

可能涉及到\(\sqrt{3}\)的方程组会有点复杂,推荐的解法是

令\(x=C+D,y=\sqrt{3}(C-D)\)

然后你会发现方程组干净了很多,从而我们可以解出x和y来,借助x和y就可以还原C,D了

解得

\[C=\frac{3+\sqrt{3}}{6},D=\frac{3-sqrt{3}}{6}\]

最后一个问题是5和3在膜998244353剩余系下统统没有二次剩余

把每个数字表示成\(r+v\sqrt{k}\)的形式即可实现模意义复数,然后就能计算了

等比数列求和涉及除法,使用这种复数实现除法的时候用分母有理化推个式子就行了

// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
using namespace std;const int N=1e5+10;
typedef unsigned long long ll;const ll mod=998244353;
inline ll po(ll a,ll p){ll r=1;for(;p;p>>=1,a=a*a%mod)if(p&1)r=r*a%mod;return r;}
# define md(x) (x=(x>=mod)?x-mod:x)
ll sqr;
struct cmp
{ll r;ll v;cmp(ll R=0,ll V=0){r=R;v=V;}friend cmp operator +(cmp a,cmp b){cmp c=cmp(a.r+b.r,a.v+b.v);md(c.r);md(c.v);return c;}friend cmp operator -(cmp a,cmp b){cmp c=cmp(a.r+mod-b.r,a.v+mod-b.v);md(c.r);md(c.v);return c;}friend cmp operator *(cmp a,cmp b){return cmp((a.r*b.r+sqr*a.v%mod*b.v)%mod,(a.r*b.v+b.r*a.v)%mod);}friend cmp operator /(cmp a,cmp b){cmp c=a*cmp(b.r,mod-b.v);ll iv=((b.r*b.r+(mod-sqr)*b.v%mod*b.v))%mod;iv=po(iv,mod-2);(c.r*=iv)%=mod;(c.v*=iv)%=mod;return c;}
}A,B,C,D;int T;int m;
// fib(n) =(A^n-B^n)*C
inline cmp cpo(cmp a,ll p)
{cmp r=cmp(1,0);for(;p;p>>=1,a=a*a)if(p&1)r=r*a;return r;
}
ll ifac[N];ll c[1010][1010];ll sr1[1010][1010];
inline void pre()
{   ifac[0]=1;ifac[1]=1;for(int i=2;i<N;i++)ifac[i]=(mod-mod/i)*ifac[mod%i]%mod;for(int i=1;i<N;i++)(ifac[i]*=ifac[i-1])%=mod;for(int i=0;i<1006;i++){c[i][0]=c[i][i]=1;for(int j=1;j<i;j++)c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;}sr1[0][0]=1;for(int i=0;i<1006;i++)for(int j=1;j<=i;j++)sr1[i][j]=(sr1[i-1][j-1]+(mod-i+1)*sr1[i-1][j])%mod;    if(m==2){   ll iv2=(mod+1)/2;sqr=5;A=cmp(iv2,iv2);B=cmp(iv2,mod-iv2);C=cmp(0,po(5,mod-2));D=cmp(C.r,mod-C.v);}else {ll iv6=po(6,mod-2);sqr=3;A=cmp(2,1);B=cmp(2,mod-1);C=cmp(3*iv6%mod,(mod-1)*iv6%mod);D=cmp(C.r,mod-C.v); }
}
//mar <cmp> st;mar <cmp> trs;
inline cmp csum(cmp q,ll n)
{if(q.r==1&&q.v==0)return (cmp){(n+1)%mod,0};cmp res=cpo(q,n+1)-cmp(1,0);res=res/(q-cmp(1,0));
//  printf("q=%lld,%lld,res=%lld,%lld\n",q.r,q.v,res.r,res.v);return res;
}
inline ll cfibk(ll n,int k)
{cmp res=cmp(0,0);for(int j=0;j<=k;j++){cmp q=cpo(A,k-j)*cpo(B,j);cmp xs=(cmp){c[k][j],0}*cpo(C,k-j)*cpo(D,j);res=res+xs*csum(q,n);}return res.r;
}
namespace solver2
{inline void solve(){ll l;ll r;int k;scanf("%lld%lld%d",&l,&r,&k);l++;r++;ll res=0;for(int i=1;i<=k;i++)(res+=(cfibk(r,i)+mod-cfibk(l-1,i))*sr1[k][i])%=mod;(res*=ifac[k])%=mod;(res*=po((r-l+1)%mod,mod-2))%=mod;printf("%lld\n",res);}
}
namespace solver3
{inline void solve(){ll l;ll r;int k;scanf("%lld%lld%d",&l,&r,&k);ll len=r-l+1;if(l&1)l++;l/=2;if(r&1)r--;r/=2;l++;r++;ll res=0;for(int i=1;i<=k;i++)(res+=(cfibk(r,i)+mod-cfibk(l-1,i))*sr1[k][i])%=mod;(res*=ifac[k])%=mod;(res*=po(len%mod,mod-2))%=mod;printf("%lld\n",res);}
}
int main()
{scanf("%d%d",&T,&m);pre();if(m==2)for(int z=1;z<=T;z++)solver2::solve();else for(int z=1;z<=T;z++)solver3::solve();return 0;
}

转载于:https://www.cnblogs.com/sweetphoenix/p/10786178.html

#loj3090 [BJOI2019] 勘破神机相关推荐

  1. [BJOI2019]勘破神机

    [BJOI2019]勘破神机 推式子好题 m=2,斐波那契数列,$f_{n+1}$项 不妨$++l,++r$,直接求$f_n$ 求$\sum C(f_n,k)$,下降幂转化成阶乘幂,这样都是多项式了, ...

  2. [BJOI2019]勘破神机(斯特林数,数论)

    [BJOI2019]勘破神机(斯特林数,数论) 题面 洛谷 题解 先考虑\(m=2\)的情况. 显然方案数就是\(f_i=f_{i-1}+f_{i-2}\),即斐波那契数,虽然这里求出来是斐波那契的第 ...

  3. BJOI2019 勘破神机 新解

    考场上就随便莽了个 Θ(k2log⁡r)\Theta(k^2\log r)Θ(k2logr) 的做法发现反正能过,就不管了--直到最近又提起这道题. 事情的经过其实是这样的--偶然看到了 cz_xuy ...

  4. luogu P5320 [BJOI2019]勘破神机

    传送门 首先我们要知道要求什么.显然每次放方块要放一大段不能从中间分开的部分.设\(m=2\)方案为\(f\),\(m=3\)方案为\(g\),\(m=2\)可以放一个竖的,或者两个横的,所以\(f_ ...

  5. [BJOI2019]勘破神机(第一类斯特林数,斐波那契数列)

    真的是好题,只不过强行多合一有点过分了-- 题目大意: $T$ 组数据.每个测试点中 $m$ 相同. 对于每组数据,给定 $l,r,k$,请求出 $\dfrac{1}{r-l+1}\sum\limit ...

  6. [BJOI2019]勘破神机(斯特林数+二项式定理+数学)

    题意:f[i],g[i]分别表示用1*2的骨牌铺2*n和3*n网格的方案数,求ΣC(f(i),k)和ΣC(g(i),k),对998244353取模,其中l<=i<=r,1<=l< ...

  7. 【LOJ】#3090. 「BJOI2019」勘破神机

    LOJ#3090. 「BJOI2019」勘破神机 为了这题我去学习了一下BM算法.. 很容易发现这2的地方是\(F_{1} = 1,F_{2} = 2\)的斐波那契数列 3的地方是\(G_{1} = ...

  8. 【luogu P5320】勘破神机(数学)(数列特征方程)(第一类斯特林数)

    勘破神机 题目链接:luogu P5320 题目大意 给你 l,r,kl,r,kl,r,k(其中 l,rl,rl,r 很大,k≤501k\leq 501k≤501),求: 1r−l+1∑i=lrCfi ...

  9. 【BJOI2019】勘破神机【数论】

    传送门(难得正经一回) 神题,思想值得学习. 首先明确题意: 两个子问题,一个2xN,一个3xN. 接下来对这个问题进行慢慢的推敲 解方案数 很明显,我们要先解决放置方案数的公式,才能做这个题. 对于 ...

最新文章

  1. 04.微博消息的语言检测
  2. <utility><xutility>模板常见操作方法
  3. Hadoop 学习笔记 (十一) MapReduce 求平均成绩
  4. iphone 使用popViewController如何避免内存泄露
  5. python网络编程—UDP的echo服务
  6. Python: 字符串中嵌入变量
  7. facade 门面 php,php设计模式之门面(Facade)模式
  8. JVM内存模型与GC回收器
  9. 计算机应用从组织内部,全国2014年10月自考管理系统中计算机应用试题和答案
  10. LeetCode-8-String to Integer (atoi)
  11. 正则表达式 两个符号的字段_Tableau正则提取字段部分内容
  12. 添加常见 URL Scheme 列表,方便快速查询⓶QA:URL Scheme适配好为何仍然报错
  13. JAX-WS发布WebService
  14. 串口通信接口标准(三)——RS232
  15. gitbub.com设置协作者提交代码步骤
  16. NFS挂载失败: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.
  17. Linux数据结构之radix-tree
  18. matlab 求公切线方程,【原创】绘制两圆公切线MATLAB代码
  19. 2020腾讯教育盛典,乐博乐博被评为“年度科技创新教育品牌”
  20. 如何才能使其输入/输出的参数个数不限

热门文章

  1. android 8.0 耳机线控,最新资讯 | 安卓8.0这大变化没法忍!要弃耳机孔
  2. 2009年ACM-ICPC——瑞典取双
  3. 画一只动态皮卡丘(一)
  4. 点乘叉乘坐标公式_向量的点乘与叉乘应用
  5. 快捷餐饮之店家后台OSS文件管理实现
  6. jboot-admin学习
  7. 记录学习向量的铭心刻骨的句子
  8. AcWing《蓝桥杯集训·每日一题》—— 3777 砖块
  9. 《人性的弱点》25句经典语录
  10. python 英文关键词提取_python 利用jieba.analyse进行 关键词提取