【GXOI/GZOI2019】逼死强迫症(生成函数)
传送门
题解:
构建矩阵快速幂的做法基本上敢来做省选的人都会了,这里不谈了。
首先设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∑nj=i∑nfj−i+1fn−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=limx→1(1−x)F(x)=2x3(1−x−x2)2∣x=1=2A22=limx→1ϕ(1−ϕx)2F(x)=1+55A32=limx→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→ϕ1lim(1−ϕx)2F(x)=51+5A32=x→φ1lim(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+A22n)ϕn+(A31+A32n)φ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】逼死强迫症(生成函数)相关推荐
- 【题解】Luogu-P5303 [GXOI/GZOI2019]逼死强迫症
P5303 [GXOI/GZOI2019]逼死强迫症 Preface 矩阵题的登峰造极之作. Description 有 TTT 组数据. 对于每组数据,给定正整数 NNN,请求出用 (N−1)(N- ...
- 【详●析】[GXOI/GZOI2019]逼死强迫症
[详●析][GXOI/GZOI2019]逼死强迫症 脑子不够用了... [题目大意] 在\(2\times N\)的方格中用\(N-1\)块\(2\times 1\)的方砖和\(2\)块\(1\tim ...
- P5303 [GXOI/GZOI2019]逼死强迫症 题解
P5303 [GXOI/GZOI2019]逼死强迫症 P5303 [GXOI/GZOI2019]逼死强迫症 说实在的这题不难,但是我推 Dp\tt DpDp 的时候却只和正解相差一点,最后还是看了题解 ...
- P5303 [GXOI/GZOI2019]逼死强迫症(斐波拉契、矩阵乘法)
解析 非常妙的一个题,感受到了斐波拉契优美的归纳性质. 首先,不难发现只要两个1*1的位置固定,中间的摆法就固定了,而两边的方案都是经典的斐波拉契数列(设为 fif_ifi). 那么枚举中间的间隔再 ...
- [GXOI/GZOI2019]逼死强迫症
一.题目 点此看题 二.解法 设f[i]f[i]f[i]为大小为2×i2\times i2×i的矩阵填充的方案数,首先考虑不放特殊格子(1×11\times 11×1),那么可以从f[i−1]f[i- ...
- [GXOI/GZOI2019]逼死强迫症 题解
传送门 题意:用n−1n-1n−1块大小为1×21\times21×2的砖和两块大小为1×11\times11×1的砖铺满2×n2\times n2×n的路,要求两块小砖不能有边相邻,求方案数. 这题 ...
- GXOI/GZOI2019 逼死强迫症 题解
题目传送门 题目大意: 有一个 2×n2\times n2×n 的网格图,有 nnn 个 1×21\times 21×2 的方块,其中一个被劈开变成了两个 1×11\times 11×1 大小的方块, ...
- GXOI/GZOI2019题解
GXOI/GZOI2019题解 P5300 [GXOI/GZOI2019]与或和 一眼题.. 显然枚举每个二进制位,答案就变成了全1子矩阵数量. 这个xjb推推,单调栈一下就行了. #include& ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- [GXOI/GZOI2019]旧词——树链剖分+线段树
题目链接: [GXOI/GZOI2019]旧词 对于$k=1$的情况,可以参见[LNOI2014]LCA,将询问离线然后从$1$号点开始对这个点到根的路径链修改,每次询问就是对询问点到根路径链查询即可 ...
最新文章
- 做一个简单的网上交易系统(参考淘宝、天猫的交易系统)
- 苹果抢安卓用户出“杀手锏”,连安卓手机App都能一键同步
- 学习笔记(01):5天Python闯关训练营-103期-re模块使用案例
- Linux之32/64位int、char、int*、char*与空结构体大小
- SharePoint 2010 文档管理系列
- STM32的CAN波特率设置方法详解
- iphone长截图哪个软件好_iPhone上最好的长截图工具!
- 5个好用的开源网络监控工具
- 【活字格案例】综合报表信息管理系统搭建
- 个人怎样出书需要走哪些流程
- echarts树图tree制作家谱教程
- 路由器连接猫服务器未响应,路由器连接猫不能上网怎么办
- javascript操作div中的marginTop
- 考研二战日记-第11天——高数2.1 导数概念
- Photoshop入门教程:画笔工具轻松打造轻纱效果
- IntelliJ配置jenkins服务的Crumb Data
- 「我们只投这两种AI公司」, 三位局内人首次公开AI投资的技术与产业标准
- caffe学习系列:训练自己的图片集(超详细教程)
- 学习OpenCV3:在空白图片上画虚线
- 仙剑三功略(结局,冶炼,魔剑养成)