题目传送门

分析:

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. 转 最近5年183个Java面试问题列表及答案[最全]

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 Stri ...

  2. 【37.48%】【hdu 2587】How far away ?(3篇文章,3种做法,LCA之Tarjan算法)

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  3. .Net Core解除文件上传大小限制

    一共要修改两处地方: \Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddMvc( ...

  4. 如何抢占云栖大会C位?史上最强强强攻略来了

    本文作者:阿里云头条 原文链接 本文为云栖社区原创内容,未经允许不得转载.

  5. [译] 重新思考 1 号进程 / Rethinking PID 1

    By Lennart Poettering 译 SReadFox 原文链接:http://0pointer.de/blog/projects/systemd.html 译注:笔者大约在 2011 年读 ...

  6. Ubuntu14.04虚拟机下基本操作(typical安装)

    1.打开终端:ctrl+alt+T 2.图形桌面和命令行界面切换:Ctrl+Alt+F1和Ctrl+Alt+F7 3.切换到root用户:激活前,sudo su+回车: 激活后,su+回车.  切换回 ...

  7. UITapGestureRecognizer 和 UICollectionView、UITableView的点击事件冲突问题

    解决:https://blog.gocy.tech/2016/11/19/iOS-touch-handling/ 1. tap.delegate = self; tap加个代理<UIGestur ...

  8. CodeForces - 1228D

    乍一看,嗯,图论题,不错: 结果,这尼玛是模拟???? 传送链接:https://codeforces.com/contest/1228/problem/D 看了大佬的代码瞬间就明白了许多!!! #i ...

  9. requests-html库render方法的使用

    一.render的使用 from requests_html import HTMLSession session =HTMLSession() response = session.get('htt ...

  10. MinGW-W64下载与安装

    安装方案 1 下载安装包,MinGW-w64 - for 32 and 64 bit Windows,然后直接以管理员安装即可,但是这个方案在部分电脑可能不行,会提示 cannot download ...