传送门


题解:

构建矩阵快速幂的做法基本上敢来做省选的人都会了,这里不谈了。

首先设fif_ifi​表示斐波那契数列第iii项,我们知道1⋅11\cdot 11⋅1两侧都是斐波那契数列,得到:

Fn=2∑i=3n∑j=infj−i+1fn−jF_n=2\sum_{i=3}^n\sum_{j=i}^nf_{j-i+1}f_{n-j}Fn​=2i=3∑n​j=i∑n​fj−i+1​fn−j​

直接得到FFF生成函数F(x)=2x3(1−x)(1−x−x2)2F(x)=\frac{2x^3}{(1-x)(1-x-x^2)^2}F(x)=(1−x)(1−x−x2)22x3​

分式拆分,也可以搞特征方程,待定系数法,设ϕ=1+52,φ=1−52\phi=\frac{1+\sqrt 5}{2},\varphi=\frac{1-\sqrt 5}{2}ϕ=21+5​​,φ=21−5​​,我们知道:

F(x)=A111−x+A211−ϕx+A22(1−ϕx)2+A311−φ+A32(1−φx)2F(x)=\frac{A_{11}}{1-x}+\frac{A_{21}}{1-\phi x}+\frac{A_{22}}{(1-\phi x)^2}+\frac{A_{31}}{1-\varphi}+\frac{A_{32}}{(1-\varphi x)^2}F(x)=1−xA11​​+1−ϕxA21​​+(1−ϕx)2A22​​+1−φA31​​+(1−φx)2A32​​

把分母分别乘过去求极限可以得到A11=lim⁡x→1(1−x)F(x)=2x3(1−x−x2)2∣x=1=2A22=lim⁡x→1ϕ(1−ϕx)2F(x)=1+55A32=lim⁡x→1φ(1−φx)2F(x)=1−55A_{11}=\lim_{x\rightarrow 1}(1-x)F(x)=\frac{2x^3}{(1-x-x^2)^2}\vert _{x=1}=2\\A_{22}=\lim_{x\rightarrow \frac{1}{\phi}}(1-\phi x)^2F(x)=\frac{1+\sqrt 5}{5}\\A_{32}=\lim_{x\rightarrow \frac{1}{\varphi}}(1-\varphi x)^2F(x)=\frac{1-\sqrt 5}{5}A11​=x→1lim​(1−x)F(x)=(1−x−x2)22x3​∣x=1​=2A22​=x→ϕ1​lim​(1−ϕx)2F(x)=51+5​​A32​=x→φ1​lim​(1−φx)2F(x)=51−5​​

根据特征方程,Fn=A11+(A21+A22n)ϕn+(A31+A32n)φnF_n=A_{11}+(A_{21}+A_{22}n)\phi^n+(A_{31}+A_{32}n)\varphi^nFn​=A11​+(A21​+A22​n)ϕn+(A31​+A32​n)φn

将F1=0,F2=0F_1=0,F_2=0F1​=0,F2​=0代入计算可以知道A21=−22550−1,A31=22550−1A_{21}=-\frac{22\sqrt 5}{50}-1,A_{31}=\frac{22\sqrt 5}{50}-1A21​=−50225​​−1,A31​=50225​​−1

得到通项公式,搞就行了,注意%1e9+7\% 1e9+7%1e9+7意义下没有555的二次剩余,所以直接开一个复数类型即可。


代码:

#include<bits/stdc++.h>
#define ll long long
#define re register
#define cs constcs int mod=1e9+7;
inline int add(int a,int b){a+=b-mod;return a+(a>>31&mod);}
inline int dec(int a,int b){a-=b;return a+(a>>31&mod);}
inline int mul(int a,int b){ll r=(ll)a*b;return r>=mod?r%mod:r;}
inline int power(int a,int b,int res=1){for(;b;b>>=1,a=mul(a,a))(b&1)&&(res=mul(res,a));return res;}
inline void Inc(int &a,int b){a+=b-mod;a+=a>>31&mod;}
inline void Dec(int &a,int b){a-=b;a+=a>>31&mod;}
inline void Mul(int &a,int b){a=mul(a,b);}
cs int inv2=power(2,mod-2),inv5=power(5,mod-2),inv50=power(50,mod-2);struct cp{int x,y;//x + y\sqrt 5cp(){}cp(int _x,int _y=0):x(_x),y(_y){}friend cp operator+(cs cp &a,cs cp &b){return cp(add(a.x,b.x),add(a.y,b.y));}friend cp operator-(cs cp &a,cs cp &b){return cp(dec(a.x,b.x),dec(a.y,b.y));}friend cp operator*(cs cp &a,cs cp &b){return cp(add(mul(a.x,b.x),mul(5,mul(a.y,b.y))),add(mul(a.x,b.y),mul(b.x,a.y)));}friend cp operator*(cs cp &a,int b){return cp(mul(a.x,b),mul(a.y,b));}
};inline cp power(cp a,int b){cp res(1);for(;b;b>>=1,a=a*a)if(b&1)res=res*a;return res;
}cs cp t1=cp(1,1)*inv5,t2=cp(1,mod-1)*inv5;
cs cp p1=cp(mod-1,mod-mul(22,inv50)),p2=cp(mod-1,mul(22,inv50));
cs cp q1=cp(1,1)*inv2,q2=cp(1,mod-1)*inv2;signed main(){int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);printf("%d\n",(2+((t1*n+p1)*power(q1,n)).x+((t2*n+p2)*power(q2,n)).x)%mod);}return 0;
}

【GXOI/GZOI2019】逼死强迫症(生成函数)相关推荐

  1. 【题解】Luogu-P5303 [GXOI/GZOI2019]逼死强迫症

    P5303 [GXOI/GZOI2019]逼死强迫症 Preface 矩阵题的登峰造极之作. Description 有 TTT 组数据. 对于每组数据,给定正整数 NNN,请求出用 (N−1)(N- ...

  2. 【详●析】[GXOI/GZOI2019]逼死强迫症

    [详●析][GXOI/GZOI2019]逼死强迫症 脑子不够用了... [题目大意] 在\(2\times N\)的方格中用\(N-1\)块\(2\times 1\)的方砖和\(2\)块\(1\tim ...

  3. P5303 [GXOI/GZOI2019]逼死强迫症 题解

    P5303 [GXOI/GZOI2019]逼死强迫症 P5303 [GXOI/GZOI2019]逼死强迫症 说实在的这题不难,但是我推 Dp\tt DpDp 的时候却只和正解相差一点,最后还是看了题解 ...

  4. P5303 [GXOI/GZOI2019]逼死强迫症(斐波拉契、矩阵乘法)

    解析 非常妙的一个题,感受到了斐波拉契优美的归纳性质. 首先,不难发现只要两个1*1的位置固定,中间的摆法就固定了,而两边的方案都是经典的斐波拉契数列(设为 fif_ifi​). 那么枚举中间的间隔再 ...

  5. [GXOI/GZOI2019]逼死强迫症

    一.题目 点此看题 二.解法 设f[i]f[i]f[i]为大小为2×i2\times i2×i的矩阵填充的方案数,首先考虑不放特殊格子(1×11\times 11×1),那么可以从f[i−1]f[i- ...

  6. [GXOI/GZOI2019]逼死强迫症 题解

    传送门 题意:用n−1n-1n−1块大小为1×21\times21×2的砖和两块大小为1×11\times11×1的砖铺满2×n2\times n2×n的路,要求两块小砖不能有边相邻,求方案数. 这题 ...

  7. GXOI/GZOI2019 逼死强迫症 题解

    题目传送门 题目大意: 有一个 2×n2\times n2×n 的网格图,有 nnn 个 1×21\times 21×2 的方块,其中一个被劈开变成了两个 1×11\times 11×1 大小的方块, ...

  8. GXOI/GZOI2019题解

    GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include& ...

  9. 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症

    LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...

  10. [GXOI/GZOI2019]旧词——树链剖分+线段树

    题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可 ...

最新文章

  1. 做一个简单的网上交易系统(参考淘宝、天猫的交易系统)
  2. 苹果抢安卓用户出“杀手锏”,连安卓手机App都能一键同步
  3. 学习笔记(01):5天Python闯关训练营-103期-re模块使用案例
  4. Linux之32/64位int、char、int*、char*与空结构体大小
  5. SharePoint 2010 文档管理系列
  6. STM32的CAN波特率设置方法详解
  7. iphone长截图哪个软件好_iPhone上最好的长截图工具!
  8. 5个好用的开源网络监控工具
  9. 【活字格案例】综合报表信息管理系统搭建
  10. 个人怎样出书需要走哪些流程
  11. echarts树图tree制作家谱教程
  12. 路由器连接猫服务器未响应,路由器连接猫不能上网怎么办
  13. javascript操作div中的marginTop
  14. 考研二战日记-第11天——高数2.1 导数概念
  15. Photoshop入门教程:画笔工具轻松打造轻纱效果
  16. IntelliJ配置jenkins服务的Crumb Data
  17. 「我们只投这两种AI公司」, 三位局内人首次公开AI投资的技术与产业标准
  18. caffe学习系列:训练自己的图片集(超详细教程)
  19. 学习OpenCV3:在空白图片上画虚线
  20. 仙剑三功略(结局,冶炼,魔剑养成)

热门文章

  1. 一、Tomcat概述
  2. 【正则表达式】自动生成各类正则代码
  3. mysql 查询每个月的销售额 和 每天的销售额
  4. 量子态操作:基于门的三态旋转
  5. 客户流失预测 —— 资源汇总
  6. Linux技巧之Ubuntu11.04下安装极点五笔输入法
  7. 漱口水的性别真的重要吗
  8. 利用AST对抗js混淆(三) 控制流平坦化(Control Flow Flattening)的处理
  9. 布尔运算 : ^(异或运算XOR)、(与运算AND)、|(或运算OR)、 、~(非门NOT)
  10. Minimit Anima – 硬件加速的 CSS3 动画插件