20191216 GXOI 2019模拟赛 逼死强迫症
题目传送门
分析:
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模拟赛 逼死强迫症的更多相关文章
- BJOI 2019 模拟赛 #2 题解
T1 完美塔防 有一些空地,一些障碍,一些炮台,一些反射镜 障碍会挡住炮台的炮, 反射镜可以 90° 反射炮台的光线,炮台可以选择打他所在的水平一条线或者竖直一条线 求是否有一组方案满足每个空地必须要 ...
- 【BZOJ5505】[GXOI/GZOI2019]逼死强迫症(矩阵快速幂)
[BZOJ5505][GXOI/GZOI2019]逼死强迫症(矩阵快速幂) 题面 BZOJ 洛谷 题解 如果没有那两个\(1*1\)的东西,答案就是斐波那契数,可以简单的用\(dp\)得到. 大概是设 ...
- [LOJ3086][GXOI/GZOI2019]逼死强迫症——递推+矩阵乘法
题目链接: [GXOI/GZOI2019]逼死强迫症 设$f[i][j]$表示前$i$列有$j$个$1*1$的格子的方案数,那么可以列出递推式子: $f[i][0]=f[i-1][0]+f[i-2][ ...
- P5303 [GXOI/GZOI2019]逼死强迫症
题目地址:P5303 [GXOI/GZOI2019]逼死强迫症 这里是官方题解 初步分析 从题目和数据范围很容易看出来这是一个递推 + 矩阵快速幂,那么主要问题在于递推的过程. 满足条件的答案一定是以 ...
- 『2019/4/9 TGDay2模拟赛 反思与总结』
2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...
- 『2019/4/8 TGDay1模拟赛 反思与总结』
2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...
- 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)
Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...
- 【LOJ】#3086. 「GXOI / GZOI2019」逼死强迫症
LOJ#3086. 「GXOI / GZOI2019」逼死强迫症 这个就是设状态为\(S,j\)表示轮廓线为\(S\),然后用的1×1个数为j 列出矩阵转移 这样会算重两个边相邻的,只要算出斐波那契数 ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
随机推荐
- vue-learning:21 - js - mixins
mixins 混入是一种对重复代码的组织方式,可以在多个组件间复用代码. 如果在项目中,在多个组件间有一段逻辑代码是共同的.那常见的处理方式是: 每个组件都复制粘贴代码(显然这是最不好方式) 将以共同 ...
- Curator源码阅读 - ConnectionState的管理与监听
看看Curator框架 为实现对 连接状态ConnectionState的监听,都是怎么构造框架的.后面我们也可以应用到业务的各种监听中. Curator2.13实现 接口 Listener List ...
- 企业级Docker私有仓库Harbor
一.Harbor简介 1.Harbor介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docke ...
- JMeter录制登录测试
本节试图解释使用任何公开可用的网站记录登录测试的确切步骤,该网站提供具有登录凭据的可靠登录页面. 出于测试目的,我们将使用OrangeHRM在URL- http://opensource.demo.o ...
- Object 与 Function那神奇而混乱的搞基关系
// Object 与 Function神奇而混乱的搞基关系... Object.__proto__ === Function.prototype; // true Object.__proto__ ...
- 【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)
[题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操 ...
- 基于Tesseract的OCR识别小程序
一.背景 先说下开发背景,今年有次搬家找房子(2020了应该叫去年了),发现每天都要对着各种租房广告打很多电话.(当然网上也找了实地也找),每次基本都是对着墙面看电话号码然后拨打,次数一多就感觉非常麻 ...
- vmware 14 激活码
VMware虚拟机已升级至14版本,之前的12版本的秘钥已经无法使用,在此分享一下VMware Workstation 14永久激活密钥: CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ...
- Python for Data Analysis 学习心得(一) - numpy介绍
一.简介 Python for Data Analysis这本书的特点是将numpy和pandas这两个工具介绍的很详细,这两个工具是使用Python做数据分析非常重要的一环,numpy主要是做矩阵的 ...
- .Net PE
// ConsoleApplication26.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h& ...