HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)
题意:
用1*2的骨牌铺满4*n的矩形总共有多种方法
经典题:可见骨牌铺方格的多种做法
因为宽只有4,考虑先求递推式,假设当前长度为x,有:
①长度为x-1的所有情况后面竖着放2个骨牌,f(x) += f(x-1)
②长度为x-2的所有情况后面横着放4个骨牌或者横着放2个,竖着放2个,而后者又有三种不同放法,f(x) += 4f(x-2)
③长度为x-3的所有情况后面横着放4个,竖着放2个,去掉和②重复的有2种情况,f(x) += 2f(x-3)
④长度为x-4的所有情况后面横着放6个,竖着放2个,去掉和②③重复的有3种情况,f(x) += 3f(x-4)
……(这里建议纸上画一画)
最后可以发现规律得到公式
将f(n)和f(n-1)相加有
这样就可以转成矩阵了
然后就可以愉快的快速幂了
#include<stdio.h>
#include<string.h>
#define mod 1000000007
#define LL long long
LL q[6] = {0,5,2,1,1};
typedef struct
{LL i, j;LL a[6][6];void init(){memset(a, 0, sizeof(a));a[1][4] = a[2][1] = a[2][2] = a[3][1] = a[4][3] = 1;a[1][2] = 5;}void unit(){memset(a, 0, sizeof(a));for(i=1;i<=4;i++)a[i][i] = 1;}
}Matrix;
Matrix Jz;
Matrix Powto(Matrix p, LL k);
Matrix Jjcf(Matrix p1, Matrix p2);
int main(void)
{LL i, n, ans;while(scanf("%lld", &n)!=EOF){if(n==1)printf("1\n");else if(n==2)printf("5\n");else{Jz.init();Jz = Powto(Jz, n-2);ans = 0;for(i=1;i<=4;i++)ans = (ans+q[i]*Jz.a[1][i])%mod;printf("%lld\n", ans);}}return 0;
}Matrix Powto(Matrix p, LL k)
{Matrix E;E.unit();while(k){if(k%2)E = Jjcf(E, p);p = Jjcf(p, p);k /= 2;}return E;
}Matrix Jjcf(Matrix p1, Matrix p2)
{Matrix pe;LL i, j, k;memset(pe.a, 0, sizeof(pe.a));for(i=1;i<=4;i++){for(j=1;j<=4;j++){for(k=1;k<=4;k++)pe.a[i][j] = (pe.a[i][j]+p1.a[i][k]*p2.a[k][j])%mod;}}return pe;
}
HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)相关推荐
- HDU 6185 Covering 矩阵快速幂 递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...
- hdu 5411 CRB and Puzzle(矩阵快速幂)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5411 解题思路: 题目大意: 给定n个点 常数m 下面n行第i行第一个数字表示i点的出边数,后面给出 ...
- hdu 6185 Covering 矩阵快速幂
题意: 用1*2和2*1的两种地毯铺地 问有多少种情况 思路: 直接推转移方程 从An-1的地方只有1种转移方法 从An-2的地方有5种转移方法 n-3转移不到n 但是n-4可以 也是最复杂的 从An ...
- 【HDU - 5015 】233 Matrix (矩阵快速幂)
题干: In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or ...
- HDU 6183 2017广西邀请赛:Color it(线段树)
题目太长了就直接放链接吧 http://acm.hdu.edu.cn/showproblem.php?pid=6183 题意: 一个空的坐标系,有④种操作:①1 x y c表示在(x, y)点染上颜色 ...
- HDU 6184 2017广西邀请赛:Counting Stars(三元环)
题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V=(A,B,C,D) && E=(AB,BC,CD,DA,AC) 可以看出A-struc ...
- HDU 6191 2017广西邀请赛:Query on A Tree(字典树启发式合并)
题意: 有一棵n个节点的树,每个节点都有一个值,m次查询,每次两个数x y表示以x为根的子树中哪个节点权值异或y得出的结果最大,求最大结果 离线 和线段树合并一样,在搜索过程中将多个字典树并在一起 每 ...
- HDU 6188 2017广西邀请赛:Duizi and Shunzi
题意: 有n张牌,每张牌上都有一个不超过n的正整数,你可以选择三张数字连续的牌作为一个顺子,也可以选择两张数字一样的牌作为一个对子,现要让对子和顺子的数量之和尽可能多,求最大数量 先排序 因为对子只消 ...
- HDU 6186 2017广西邀请赛:CS Course
题意: n个数,m次查询,每次给出一个p,求出除了第p个数以外其它所有数的且和,或和,异或和 统计下每个二进制位1的数量,例如z[5] = x表示有x个数第5个二进制位为1 之后每次查询只要check ...
最新文章
- 下面关于表单的叙述错误的是_下面是关于表单数据环境的叙述,其中错误的是A.可以在数据环境中加入与表单操作有关的表B.数据环...
- 远程办公在美国有多受欢迎?有人宁愿降薪 50% 也不愿再回办公室
- 移动端触屏click点击事件延迟问题,以及tap的解决方案
- nginx实现防止ddos攻击
- 【机器学习基础】数学推导+纯Python实现机器学习算法3:k近邻
- php7不兼容phalcon_Phalcon7
- Three.js之渲染器
- 「软件项目管理」一文了解软件项目团队计划
- PyCharm集成Anaconda3环境下安装 腾讯优图报错 ERROR: Could not install packages due to an EnvironmentError
- 背景选择器selector替换按钮默认背景
- 反编译插件jadclipse和jad.exe的组合使用
- MethodInterceptor拦截器
- mac 电脑连接不上github_我电脑中的一些常用软件
- Linux 端口占用情况查看
- 中国科学院微电子学院计算机,周云燕 - 中国科学院大学 - 微电子学院
- LCM模组的简介与质量管理(连载四)
- word文档怎么批量解除锁定_解除锁定的word文档的方法
- Android App混合开发
- 关于STM32的jlink仿真器突然不能工作的解决方法
- 西瓜综艺走进厦门大同小学 唤醒家庭亲子交流
热门文章
- python基础教程廖雪峰云-为什么看不懂廖雪峰的Python学习教程?
- python与office结合可以干什么-python与office(一)
- 判断是否是质数 c++java
- Redis基础学习(2)
- vue组件内数值做watch监听,首次监听不到的问题
- 限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)
- php获取pc访问还是手机号_PHP函数判断电脑端浏览器访问访问还是手机端浏览器访问...
- jQuery 学习-DOM篇(六):jQuery 替换 DOM 元素
- jQuery判断是否为对象或者数组
- SpringMVC控制器单例和多例