题目传送门

分析:

sb矩阵加速推一辈子。。。

想了1个小时,结果好像还和标准答案的方法不一样诶。。。

标算解法:

老套路,对于新加入的一列,考虑它与目前最后一列的关系

我们可以列出四种方案:

其中前两种我们知道一定使用了一个小块

但是后面两种就不知道是用过还是没用过了,用了就一定用了两个

所以再枚举两个状态0/1,表示用了或没用

然后就有了6个状态。。。

这6个状态可以互相胡乱转移一通,然后就可以得出答案2333

具体怎么转移其实不难,然后说一说自己的口胡写法2333

胡乱解法(自己的):

老套路,考虑新加入一行(假设两个碎块在前面已经用过)

此时考虑竖放和横放就是g ( i - 1 ) + g ( i - 2 )

然后考虑碎块放最后。。。

当确定两个碎块的间距后和相对位置时,摆放方式也就确定了

然后我们假设最后放的是包含碎块的几列,当列数为 j 时,前面的方案数就为Fib( i - j )

那么枚举 j 后的总方案就是SumFib ( i - 3 ) ,因为碎块长度最小为3

所以

g ( i ) = g ( i - 1 ) + g ( i - 2 ) + 2 * SumFib ( i - 3 )

前缀和我们推一下式子得到:

SumFib ( i ) = 2 * SumFib ( i - 1 ) - SumFib ( i - 3 )

然后这里有6个关键值,我们可以用5*5的矩阵维护

字很烂,原谅一下哈哈哈嗝。。。

然后矩阵加速就好了。。。

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue> #define maxn 100005
#define MOD 1000000007 using namespace std; inline int getint()
{
int num=,flag=;char c;
while((c=getchar())<''||c>'')if(c=='-')flag=-;
while(c>=''&&c<='')num=num*+c-,c=getchar();
return num*flag;
} struct node{
long long a[][];
friend node operator *(node x,node y)
{
node z;memset(z.a,,sizeof z.a);
for(int i=;i<;i++)for(int j=;j<;j++)for(int k=;k<;k++)
(z.a[i][j]+=x.a[i][k]*y.a[k][j])%=MOD;
return z;
}
}tr,I,A;
int P[][]={{,,,,},{,,,,},{,,,,},{,,,,},{,,MOD-,,}}; inline node ksm(node num,int k)
{
node ret=I;
for(;k;k>>=,num=num*num)if(k&)ret=ret*num;
return ret;
} int main()
{
int T=getint();
for(int i=;i<;i++)I.a[i][i]=;
for(int i=;i<;i++)for(int j=;j<;j++)tr.a[i][j]=P[i][j];
A.a[][]=,A.a[][]=,A.a[][]=;
while(T--)
{
int n=getint()-;
if(n<){printf("0\n");continue;}
node tmp=A*ksm(tr,n);
printf("%lld\n",tmp.a[][]);
}
}

20191216 GXOI 2019模拟赛 逼死强迫症的更多相关文章

  1. BJOI 2019 模拟赛 #2 题解

    T1 完美塔防 有一些空地,一些障碍,一些炮台,一些反射镜 障碍会挡住炮台的炮, 反射镜可以 90° 反射炮台的光线,炮台可以选择打他所在的水平一条线或者竖直一条线 求是否有一组方案满足每个空地必须要 ...

  2. 【BZOJ5505】[GXOI/GZOI2019]逼死强迫症(矩阵快速幂)

    [BZOJ5505][GXOI/GZOI2019]逼死强迫症(矩阵快速幂) 题面 BZOJ 洛谷 题解 如果没有那两个\(1*1\)的东西,答案就是斐波那契数,可以简单的用\(dp\)得到. 大概是设 ...

  3. [LOJ3086][GXOI/GZOI2019]逼死强迫症——递推+矩阵乘法

    题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][ ...

  4. P5303 [GXOI/GZOI2019]逼死强迫症

    题目地址:P5303 [GXOI/GZOI2019]逼死强迫症 这里是官方题解 初步分析 从题目和数据范围很容易看出来这是一个递推 + 矩阵快速幂,那么主要问题在于递推的过程. 满足条件的答案一定是以 ...

  5. 『2019/4/9 TGDay2模拟赛 反思与总结』

    2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...

  6. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  7. 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)

    Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...

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

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

  9. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

随机推荐

  1. Java 学习笔记(6)——继承

    之前说过了Java中面向对象的第一个特征--封装,这篇来讲它的第二个特征--继承.一般在程序设计中,继承是为了减少重复代码. 继承的基本介绍 public class Child extends Pa ...

  2. python基础试题(一)

    1.执行 Python 脚本的两种方式 1.python 进入解释器 2.python 1.py 执行文件 limux里 ./1.py 2.简述位.字节的关系 8位1个字节.计算机处理以字节为单位,存 ...

  3. python列表的增删查改

    添加新的元素 append() insert() extend() +号 删除元素 pop() remove() del xxx[index] 修改 xxx[index] = value 查找 in. ...

  4. JavaScript | 值传递、引用传递的区别

    值传递 JavaScript值传递的数据类型:字符串(String).数字(Number).布尔(Boolean).空(Null).未定义(Undefined), 这五种数据类型是按值访问的,因为可以 ...

  5. 0008 CSS初识(行内式、内部样式表、外部样式表)

    typora-copy-images-to: media 第01阶段.前端基础.CSS初识 CSS层叠样式表 学习目标 理解 css的目的作用 css的三种引入方式 应用 css三种引用方式的书写 通 ...

  6. java基础 -- 关键字static的用法

    static关键字的基本作用就是方便在没有创建对象的情况下调用类的方法/变量, static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static ...

  7. windows 服务的安装、启动、状态查询、停止操作c++实现

    具体的自己看看代码 粘贴复制即可使用 卸载也很简单自己查看MSDN 加上就是 #ifndef __SERVICEMANAGE_H__ #define __SERVICEMANAGE_H__ #incl ...

  8. 1086 就不告诉你 (15分)C语言

    做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地微笑着告诉他:"五十三."本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入 ...

  9. 1027 打印沙漏 (20 分)C语言

    题目描述 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓"沙漏形状" ...

  10. windebug(转载别人的节选)

    问题一:WinDBG分X86和X64两个版本 如果你用的是32位的WinDBG,那直接打开就行:你如果用的是64位的版本,那么如果调试64位代码也直接打开,如果调试x86的代码,要使用Wow64下的W ...