题目链接

LOJ:https://loj.ac/problem/3086

洛谷:https://www.luogu.org/problemnew/show/P5303

Solution

显然不考虑\(1\times 1\)的矩形就是斐波那契数列,设为\(g\),则\(g_n=g_{n-1}+g_{n-2}\)。

设考虑的方案数为\(f\),那么可以枚举放哪里得到一个暴力式子:
\[ \begin{align}f_n&=2\sum_{i=1}^{n}\sum_{j=i+2}^{n}g_{i-1}\cdot g_{n-j}\\ f_n&=2\sum_{i=1}^{n}g_{i-1}\sum_{j=i+2}^{n}g_{n-j}\\ f_n&=2\sum_{j=3}^{n}g_{n-j}\sum_{i=1}^{j-2}g_{i-1}\\ f_n&=2\sum_{j=3}^{n}g_{n-j}s_{j-3} \end{align} \]
设\(s\)为\(g\)的前缀和。

然后我们考虑\(f_{n+1}\)用已知量凑出来:
\[ \begin{align} \frac{1}{2}f_{n+1}&=\sum_{i=3}^{n+1}g_{n+1-i}s_{i-3}\\ \frac{1}{2}f_{n+1}&=s_{n-2}+s_{n-3}+\sum_{i=3}^{n-1}g_{n+1-i}s_{i-3}\\ \frac{1}{2}f_{n+1}&=s_{n-2}+s_{n-3}+\sum_{i=3}^{n-1}(g_{n-i}+g_{n-i-1})s_{i-3}\\ \frac{1}{2}f_{n+1}&=s_{n-2}+s_{n-3}+\sum_{i=3}^{n}g_{n-i}s_{i-3}-s_{n-3}+\sum_{i=3}^{n-1}g_{n-i-1}s_{i-3}\\ f_{n+1}&=2s_{n-2}+f_n+f_{n-1} \end{align} \]
其实到这里已经可以矩阵维护了,但是那样矩阵会设的很大,对于前缀和我们考虑如何递推:
\[ s_n=2+\sum_{i=2}^{n}g_i=2+\sum_{i=2}^{n}g_{i-1}+g_{i-2}=s_{n-1}+s_{n-2}+1 \]
那么变一下就是:
\[ s_n=s_{n+2}-s_{n-1}-1=g_{n+2}-1 \]
那么我们只需要开\(5\times 5\)的矩阵维护就好了,复杂度\(O(125T\log n)\)。

#include<bits/stdc++.h>
using namespace std;void read(int &x) {x=0;int f=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}void print(int x) {if(x<0) putchar('-'),x=-x;if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}#define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int >#define pb push_back
#define mp make_pair
#define fr first
#define sc second#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = 2e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 1e9+7;int n,T;const int tmp[5][5] ={{1,1,0,0,0},{1,0,0,0,0},{2,0,1,1,0},{0,0,1,0,0},{mod-2,0,0,0,1}};int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
int del(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ll*x*y-1ll*x*y/mod*mod;}struct Matrix {int a[6][6];Matrix () {memset(a,0,sizeof a);}Matrix operator * (const Matrix &r) const {Matrix res;for(int i=0;i<5;i++)for(int j=0;j<5;j++)for(int k=0;k<5;k++)res.a[i][j]=add(res.a[i][j],mul(a[i][k],r.a[k][j]));return res;}void print() {FOR(i,0,4){FOR(j,0,4)printf("%d ",a[i][j]);puts("");}puts("");}
};Matrix qpow(Matrix a,int x) {Matrix res;for(int i=0;i<5;i++) res.a[i][i]=1;for(;x;x>>=1,a=a*a) if(x&1) res=res*a;return res;
}void solve() {read(n);if(n<=2) return puts("0"),void();Matrix ans,res;FOR(i,0,4) FOR(j,0,4) res.a[i][j]=tmp[i][j];ans.a[0][2]=2,ans.a[0][3]=1,ans.a[0][4]=1;write((ans*qpow(res,n-2)).a[0][0]);
}int main() {read(T);while(T--) solve();return 0;
}

转载于:https://www.cnblogs.com/hbyer/p/10845206.html

[LOJ3086] [GXOI2019] 逼死强迫症相关推荐

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

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

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

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

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

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

  4. 三星 android 自定义物理按键,新机皇驾到!三星Note10将取消物理按键,网友:这造型逼死强迫症...

    原标题:新机皇驾到!三星Note10将取消物理按键,网友:这造型逼死强迫症 在安卓阵营中,三星一直以来都是一个非常特殊的厂家.因为其在屏幕.芯片等方面都可以自给自足的特性让其在旗舰机型领地中一直保持王 ...

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

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

  6. android放弃人脸解锁,【新机】安卓12系统界面亮相:超圆润 | iPhone 屏下3D人脸识别渲染图,逼死强迫症...

    来源:大米评测 最近谷歌亲儿子系列Pixel6/6Pro渲染图已经正式曝光,从整体的ID外观来看,后盖这一条黑色相机模组,配合黑色中框+顶部橙色点缀,确实很有辨识度,同时因为正面采用了单摄小孔设计,整 ...

  7. 12种逼死“强迫症”的创意家居设计

    前几天,有位帅逼向我抱怨,女朋友让我等她5分钟,结果两小时过去了她还没搞定.额,女人说这种话你也当真! 女人的谎话还真不少,不想死的太惨烈,你应该知道谎话背后的意思! (1) 谎话:我马上就好了. 实 ...

  8. 「GXOI / GZOI 2019」逼死强迫症

    传送门 problem ITX351 要铺一条 2×n2×n2×n 的路,为此他购买了 nnn 块 2×12×12×1 的方砖.可是其中一块砖在运送的过程中从中间裂开了,变成了两块 1×11×11×1 ...

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

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

最新文章

  1. ubuntu 14.04:Error found when loading /root/.profile
  2. 电脑屏幕出现彩色条纹_电脑屏幕出现条纹
  3. NHibernate Step By Step(2)-继承映射
  4. 一个架构的演化2--用ESB集成
  5. python实现胶囊网络_胶囊网络 -- Capsule Networks
  6. CVPR2021系列(一)—— 语义图像抠图
  7. springboot 优雅关闭_Springboot 优雅停止服务的几种方法
  8. 力扣1512.好数对的数目
  9. Java基础学习总结(85)——Java中四种线程安全的单例模式实现方式
  10. ES启动错误 ERROR: the system property [es.path.conf] must be set
  11. 拓端tecdat|R语言结构方程模型 SEM 多元回归和模型诊断分析学生测试成绩数据与可视化
  12. 要是面试官再问我synchronized,我就这么答
  13. c语言小游戏如何编写,如何用c语言编写小游戏.docx
  14. 知了课堂Day3——微信小程序基础03——组件的一些笔记
  15. 苹果电脑Mac系统如何下载安装谷歌Chrome浏览器
  16. 关于最短剩余时间优先算法-进程调度模拟【C++】
  17. 操作系统基础:内存管理逻辑思维导图,简单看懂内存管理的逻辑
  18. 怎么将svn服务器上的文件彻底删除,如何彻底删除SVN中的文件和文件夹(附恢复方法)...
  19. MATLAB实现变限积分函数的积分/ 多重积分/ 如何解决求积分显示AB浮点标量报错
  20. 足球相关的英文专业术语(持续更新中...Ctrl+F可直接进行搜索)

热门文章

  1. 从私有云到云的私有部署,重新定义后云时代的企业IT
  2. 搜狐邮箱怎么开启pop3服务器,各大中文邮箱POP3服务开启方法
  3. php开源商城系统排名,开源商城系统排名哪个好?
  4. 解决Discus!x3.1论坛安装插件提示无法运行通过zend加密应用
  5. 安装好kali后必做的5件事
  6. 关于STM32中SPI硬件的NSS配置
  7. 教你如何用FVD Downloader下载在线视频
  8. plupload插件的简单使用
  9. 电信客户流失分析实战
  10. Cesium 通过scaleByDistance设置远小近大的广告牌图形视觉效果