传送门

手玩一下可以显然的发现

ans=2∑i=0n−3∑j=0n−3−if[i+1]f[j+1]ans=2\sum_{i=0}^{n-3}\sum_{j=0}^{n-3-i}f[i+1]f[j+1]ans=2∑i=0n−3​∑j=0n−3−i​f[i+1]f[j+1]

利用f[i]=(1+52)i−(1−52)i5f[i]=\frac{(\frac{1+\sqrt 5}{2})^i-(\frac{1-\sqrt 5}{2})^i}{\sqrt 5}f[i]=5​(21+5​​)i−(21−5​​)i​

暴力拆开化简就是几个等比数列求和

然后用大力乱推一波就完了

#include<bits/stdc++.h>
using namespace std;
const int RLEN=1<<20|1;
inline char gc(){static char ibuf[RLEN],*ib,*ob;(ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));return (ob==ib)?EOF:*ib++;
}
#define gc getchar
inline int read(){char ch=gc();int res=0,f=1;while(!isdigit(ch))f^=ch=='-',ch=gc();while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();return f?res:-res;
}
#define ll long long
#define re register
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define cs const
#define bg begin
#define poly vector<int>
cs int mod=1e9+7;
inline int add(int a,int b){return (a+=b)>=mod?a-mod:a;}
inline void Add(int &a,int b){(a+=b)>=mod?a-=mod:0;}
inline int dec(int a,int b){return (a-=b)<0?a+mod:a;}
inline void Dec(int &a,int b){(a-=b)<0?a+=mod:0;}
inline int mul(int a,int b){return 1ll*a*b%mod;}
inline void Mul(int &a,int b){a=1ll*a*b%mod;}
inline int ksm(int a,int b,int res=1){if(b<0)return 0;for(;b;b>>=1,Mul(a,a))(b&1)&&(Mul(res,a),1);return res;}
inline int Inv(int x){return ksm(x,mod-2);}
inline void chemx(int &a,int b){a<b?a=b:0;}
inline void chemn(int &a,int b){a>b?a=b:0;}
cs int inv2=Inv(2),inv5=Inv(5);
struct plx{int x,y;plx(int _x=0,int _y=0):x(_x),y(_y){}friend inline plx operator +(cs plx &a,cs plx &b){return plx(add(a.x,b.x),add(a.y,b.y));}friend inline plx operator -(cs plx &a,cs plx &b){return plx(dec(a.x,b.x),dec(a.y,b.y));}friend inline plx operator *(cs plx &a,cs plx &b){return plx((1ll*a.x*b.x+5ll*a.y*b.y)%mod,(1ll*a.x*b.y+1ll*a.y*b.x)%mod);}friend inline plx operator -(cs plx &a,cs int &b){return plx(dec(a.x,b),a.y);}friend inline plx operator +(cs plx &a,cs int &b){return plx(add(a.x,b),a.y);}friend inline plx operator *(cs plx &a,cs int &b){return plx(mul(a.x,b),mul(a.y,b));}
};
inline plx pksm(plx a,int b){if(b<0)return plx(0,0);plx res(1,0);for(;b;b>>=1,a=a*a)if(b&1)res=res*a;return res;
}
inline plx pInv(plx x){return plx(x.x,dec(0,x.y))*Inv(((1ll*x.x*x.x-5ll*x.y*x.y)%mod+mod)%mod);
}
inline plx calc(plx x,plx y,int n){if(n<=2)return plx(0,0);plx dx=pInv(x-1),dy=pInv(y-1),p=y*pInv(x);plx res=(pksm(y,n-1)-y)*dy*x-(pksm(x,n)-x*x)*dx;res=res-(pksm(p,n-2)-1)*(pInv(p-1))*(pksm(x,n-1)*y);res=res+(n-2)*pksm(x,n);return res*dx;
}
plx X=plx(inv2,inv2),Y=plx(inv2,dec(0,inv2));
int main(){int T=read();while(T--){int n=read();plx ans=calc(X,Y,n)+calc(Y,X,n);cout<<mul(mul((ans.x),inv5),2)<<'\n';}
}

【洛谷P5303】【GXOI/GZOI2019】—逼死强迫症(斐波那契数列)相关推荐

  1. 洛谷——P1720 月落乌啼算钱(斐波那契数列)

    P1720 月落乌啼算钱(斐波那契数列) 题目背景 (本道题目木有隐藏歌曲--不用猜了--) <爱与愁的故事第一弹·heartache>最终章. 吃完 pizza,月落乌啼知道超出自己的预 ...

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

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

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

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

  4. 「GXOI / GZOI2019」逼死强迫症——斐波那契+矩阵快速幂

    题目 [题目描述] ITX351 要铺一条 $2 \times N$ 的路,为此他购买了 $N$ 块 $2 \times 1$ 的方砖.可是其中一块砖在运送的过程中从中间裂开了,变成了两块 $1 \t ...

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

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

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

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

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

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

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

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

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

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

  10. 洛谷——P2626 斐波那契数列(升级版)矩阵

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...

最新文章

  1. java中常见类型转换
  2. R语言ggplot2可视化图中添加希腊字母实战
  3. 马王堆汉墓帛书‧老子甲本——道经
  4. python下载后如何使用-如何使用Python通过HTTP下载文件?
  5. python3 os模块
  6. Java并发编程—Atomic原子类
  7. Android面试最新总结
  8. java的ThreadLocal类的使用方法
  9. html使用最ie高版本,从html,css,javascript三方面谈谈“浏览器兼容性”的问题
  10. linux安装rabbitmq过程,Linux安装RabbitMQ
  11. java log4j 实例_log4j使用例子 - 小代码2016的个人页面 - OSCHINA - 中文开源技术交流社区...
  12. python怎么创建文本文件
  13. jmail邮件服务器,asp+JMAIL实现发送邮件
  14. 国外资源 - 含技术 - 收集
  15. 【毕业设计】大数据工作岗位数据分析与可视化 - python flask
  16. 产业的互联网化是什么时代_新时代:为什么互联网公司不应忽视65岁以上的一代...
  17. 计算机各键的名称和作用,space是什么键 键盘键位名称及功用详解
  18. 《商用密码-应用与安全性评估》学习1:密码基础知识
  19. 【C++广度搜索入门】面积
  20. 在Vf中如何将Excel数据导入(用Vf来导)?

热门文章

  1. zookeeper krb5认证时报 (Mechanism level: Clock skew too great (37) - PROCESS_TGS)])
  2. linux上安装php phpredis扩展
  3. Day03顺序表的结构设计2.0
  4. 程序员换工作都应该知道的福利
  5. 极客日报第125期:微信将于 5 月 19 日之后停止小程序打开 App 技术服务;原装 AirTag 发货时间延长至 4-5 周;TensorFlow 2.5.0稳定版发布
  6. OwnBackup在E轮融资后估值接近33.5亿美元;将其领先的云到云数据保护平台将扩展应用至微软
  7. 转:MacBook pro盒盖休眠掉电问题
  8. 一款实用电动车蓝牙钥匙方案
  9. 大疆M3508电机使用PWM控制转速
  10. 大型三甲HIS源码,EMR系统