hdu5015 矩阵快速幂233(好题)
来源:互联网 发布:新手开淘宝店怎么装修 编辑:程序博客网 时间:2024/06/05 17:21
题意:
给你一个(n+1)*(m+1)的矩阵mat,然后给你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然后输入mat[1][0] ,mat[2][0] ,mat[3][0]....然后给了矩阵中的其他数值是mat[i][j] = mat[i-1][j] + mat[i][j-1],最后让你输出mat[n][m]。
思路:
其中n <= 10 m <= 10^9 ,直接暴力果断超时,这个题目我们要仔细观察,n <= 10这个很重要,太大的话就不好弄了。这个题目我们可以用矩阵快速幂去做,构造一个n+2的矩阵
:
a[1] a[2] a[n] 233 3 1 1 1 0 0 a[1] a[2] a[n] 2333 3
* 0 1 1 0 0 =
0 0 1 0 0
1 1 1 10 0
0 0 0 1 1
给你一个(n+1)*(m+1)的矩阵mat,然后给你mat[0][1] = 233 ,mat[0][2] = 2333,mat[0][3] = 23333...,然后输入mat[1][0] ,mat[2][0] ,mat[3][0]....然后给了矩阵中的其他数值是mat[i][j] = mat[i-1][j] + mat[i][j-1],最后让你输出mat[n][m]。
思路:
其中n <= 10 m <= 10^9 ,直接暴力果断超时,这个题目我们要仔细观察,n <= 10这个很重要,太大的话就不好弄了。这个题目我们可以用矩阵快速幂去做,构造一个n+2的矩阵
:
a[1] a[2] a[n] 233 3 1 1 1 0 0 a[1] a[2] a[n] 2333 3
* 0 1 1 0 0 =
0 0 1 0 0
1 1 1 10 0
0 0 0 1 1
提示下,矩阵这么建的原因是比如当前的a[3] = 上一步的 a[1] + a[2] + a[3] + 233..ok
#include<stdio.h>#include<string.h>#define MOD 10000007typedef struct{ __int64 mat[15][15];}A;A mat_mat(A a ,A b ,int n){ A c; memset(c.mat ,0 ,sizeof(c.mat)); for(int k = 1 ;k <= n ;k ++) for(int i = 1 ;i <= n ;i ++) if(a.mat[i][k]) for(int j = 1 ;j <= n ;j ++) c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % MOD; return c;}A quick_mat(A a ,int b ,int n){ A c; memset(c.mat ,0 ,sizeof(c.mat)); for(int i = 1 ;i <= n ;i ++) c.mat[i][i] = 1; while(b) { if(b&1) c = mat_mat(c ,a ,n); a = mat_mat(a ,a ,n); b >>= 1; } return c;}int main (){ int i ,j ,n ,m; A GZ; int num[15]; while(~scanf("%d %d" ,&n ,&m)) { for(i = 1 ;i <= n ;i ++) scanf("%d" ,&num[i]); memset(GZ.mat ,0 ,sizeof(GZ.mat)); for(j = 1 ;j <= n ;j ++) { for(i = 1 ;i <= j ;i ++) GZ.mat[i][j] = 1; GZ.mat[n+1][j] = 1; } GZ.mat[n+1][n+1] = 10; GZ.mat[n+2][n+1] = GZ.mat[n+2][n+2] = 1; A now = quick_mat(GZ ,m ,n + 2); __int64 Ans = 0; for(i = 1 ;i <= n ;i ++) Ans = (Ans + num[i] * now.mat[i][n]) % MOD; Ans = (Ans + 233 * now.mat[n+1][n] + 3 * now.mat[n+2][n]) % MOD; printf("%I64d\n" ,Ans); } return 0;}
0 0
- hdu5015 矩阵快速幂233(好题)
- hdu5015 233 Matrix(矩阵快速幂)
- hdu5015(矩阵快速幂)
- 矩阵快速幂-HDU5015
- HDU5015---233 Matrix (矩阵快速幂(递推))
- hdu5015——233 Matrix(矩阵快速幂)
- hdu5015 233 Matrix 矩阵快速幂
- HDU5015-233 Matrix(矩阵快速幂)
- HDU5015 233 Matrix(矩阵快速幂)
- 【矩阵快速幂】 hdu5015 233Matrix
- HDU5015 233 Matrix(矩阵快速幂)
- hdu5015 233 Matrix 矩阵快速幂 矩阵构造方法
- 【hdu5015】233 Matrix——矩阵快速幂
- 解题报告:HDU5015 233 Matrix 矩阵快速幂
- 矩阵快速幂(2014西安网络赛)+hdu5015
- 2014西安网络预选赛1009(矩阵快速幂)hdu5015
- 233 Matrix(hdu5015 矩阵)
- hdu5015 233 Matrix(构造矩阵)
- 设计模式观后(c++还原之十 代理模式)
- 浅析ArrayList的内部实现
- 关于构造函数
- Longest Consecutive Sequence
- Android关闭软键盘
- hdu5015 矩阵快速幂233(好题)
- 数组最长递增子序列
- 面试题笔记1
- POJ 2348 Euclid's Game(博弈)
- 题目1519:合并两个排序的链表
- 1NF 2NF 3NF
- struts2.0中struts.xml配置文件详解
- oracle 多表联合查询总结归纳
- Opensuse: Use smb connetting the printer shared on Win7