hdu 5050 矩阵快速幂
来源:互联网 发布:交换机端口标签 编辑:程序博客网 时间:2024/05/01 21:48
题目大意:
有一种矩阵,它的第一行是这样一些数:a 0,0 = 0, a 0,1 = 233,a 0,2 = 2333,a 0,3 = 23333...) 除此之外,在这个矩阵里, 我们有 a i,j = a i-1,j +a i,j-1( i,j ≠ 0).现在给你 a 1,0,a 2,0,...,a n,0, 你能告诉我a n,m 是多少吗?
存一下自己写的用数组实现矩阵快速幂的模板。(以前都用挑战上的vector的模板,那个太慢了
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <stack>#include <map>#include <queue>#include <set>#include <algorithm>using namespace std;typedef long long ll;int n;const ll MOD = 10000007;ll a[15];struct matrix{ ll mat[13][13];};matrix operator * (matrix a, matrix b){ matrix c; memset(c.mat,0,sizeof(c.mat)); for(int i = 0; i <= n; ++i) for(int k = 0; k <= n; ++k) for(int j = 0; j <= n; ++j) c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j] % MOD) % MOD; return c;}matrix pow(matrix a, ll k){ matrix res; memset(res.mat,0,sizeof(res.mat)); for(int i = 0; i <= n; ++i) for(int j = 0; j <= n; ++j) res.mat[i][j] = (i == j); while(k > 0) { if(k & 1) res = res*a; a = a*a; k >>= 1; } return res;}int main(){ ll m; while(~scanf("%d%I64d", &n, &m)) { memset(a,0,sizeof(a)); for(int i = 1; i <= n; ++i) { scanf("%I64d",&a[i]); } if(m == 0) { printf("%I64d\n",a[n]%MOD); continue; } else { a[0] = 233ll; for(int i = 1; i <= n; ++i) a[i] = (a[i] + a[i-1])%MOD; a[++n] = 3ll; matrix x; memset(x.mat,0,sizeof(x.mat)); for(int i = 0; i <= n; ++i) { if(i != n) { x.mat[i][0] = 10ll; for(int j = 1; j <= i; ++j) { x.mat[i][j] = 1ll; } } x.mat[i][n] = 1ll; } x = pow(x,m-1); ll ans = 0; for(int i = 0; i <= n; ++i) { ans = (ans + (x.mat[n-1][i] * a[i]) % MOD) % MOD; } printf("%I64d\n",ans); } } return 0;}
0 0
- hdu 5050 矩阵快速幂
- 【矩阵快速幂】hdu 1575
- 【矩阵快速幂】hdu 1757
- hdu 2604 矩阵快速幂
- hdu-1575矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 1575(矩阵快速幂)
- hdu 3306 矩阵快速幂
- hdu 1757 矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 2855 矩阵快速幂
- hdu 3117 矩阵快速幂
- hdu 1005 矩阵快速幂
- hdu 4965 矩阵快速幂
- hdu 2793 矩阵快速幂
- HDU 5015(矩阵快速幂)
- hdu 5001 矩阵 快速幂
- hdu-5015(矩阵快速幂)
- 【安卓】采用静态工厂方法的Fragment实现ViewPager+Fragment
- Ubuntu16.04 gedit 中文乱码
- iOS版本《六爻八卦算命》
- 激活IntelliJ插件Jrebel Social并配置热部署
- 初识JAVA
- hdu 5050 矩阵快速幂
- Makefile依赖关系中的竖线“|”
- 关于reactjs
- Codeforces Round #367 (Div. 2) E. Working routine (十字链表)
- POJ2506Tiling
- [AngularJS面面观] 22. 依赖注入 --- 配置队列以及运行队列
- 判断两个字符串是否互为旋转词
- JZOJ8.13数字游戏
- python_openCV学习笔记(1) 绘制openCV的logo