题目的意思是有一个叫做233 Matrix的矩阵。
给定第一行元素a(0, 1) = 233, a(0, 2) = 2333, a(0, 3) = 23333, ..., a(0, n) = 10 * a(0, n - 1) + 3, (n >= 2)。
第一列元素a(1, 0), a(2, 0), a(3, 0), ..., a(n, 0),和一个递推式子a(i ,j) = a(i - 1, j) + a(i, j - 1), (i,j ≠ 0),让你求出a(n, m) mod 10000007的值。
其中,a(0, 0)应该等于0,n和m及第一列元素由输入给定。数据范围为n ≤ 10,m ≤ 109
因为数据量很大,暴力求解肯定是不行的。必定超时,虽然给定的时间是5秒钟。
那接下来就是推公式了,而我最终也真的推出来个公式,但很遗憾,它只有当n和m相等的时候才成立,可是n最大才为10,这种思路也就被否定了。
既然给定的是一个矩阵的形式,难道可以用矩阵快速幂搞出来?可以试试。注意一点,如果能构造出来快速幂的话,也只有按列来推。
对于给定的递推式a(i ,j) = a(i - 1, j) + a(i, j - 1),将它展开则a(i, j) = a(i - 1, j) + a(i, j - 1) = a(i - 2, j) + a(i - 1, j - 1) + a(i, j - 1) = a(i - 3, j) + a(i - 2, j - 1) + a(i - 1, j - 1) + a(i, j - 1) = ...
很快就可以发现规律了得到:a(i, j) = a(1, j - 1) + a(2, j - 1) + ... + a(i, j - 1) + a(0, j)。
如下图:
图片橙色部分等于蓝色部分的和,也就是上边的公式。
我们的目的是由当前蓝色的部分,推出与它紧邻的右边下一列蓝色的部分。
构造如下矩阵,我们希望找出一个n+1阶的方阵,使得如下矩阵式成立。
根据上述推导的公式,可得A矩阵的第一行为[1 0 ... 0 1],第二行为[1 1 0 ... 0 1],第三行为[1 1 1 0 ... 0 1],。。。,第n行为[1 1 1 ... 1 1]。
遗憾的是第n+1行无论怎么取值也无法是矩阵式成立。
因为a(0, m + 1) = a(0,m)* 10 + 3,那么显然n+1行的矩阵不能满足要求,可以将矩阵变成n+2行最后一行为3。则矩阵就变成:
相应的A矩阵第一行为[1 0 ... 0 1 0],第二行为[1 1 0 ... 0 1 0],第三行为[1 1 1 0 ... 0 1 0],。。。,第n行为[1 1 1 ... 1 1 0],第n+1行为[0 0 0 0 .... 0 10 1],
第n+2行为[0 0 0 0 ... 0 0 1]。则矩阵A的形式如下:
由于矩阵乘法的结合律,可得:
这样就可以对矩阵A^m使用矩阵快速幂了。
自己的代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;
const ll mod = 10000007;
int n, m;
struct matrix
{ll mat[15][15];matrix(){memset(mat, 0, sizeof(mat));}
};
matrix multi(matrix A, matrix B)
{matrix C;for(int i = 1; i <= n+2; i++)for(int j = 1; j <= n+2; j++)for(int k = 1; k <= n+2; k++)C.mat[i][j] = (C.mat[i][j] + A.mat[i][k]*B.mat[k][j]) % mod;return C;
}
matrix fast_mod(matrix base, int k)
{matrix tmp;for(int i = 1; i <= n+2; i++)tmp.mat[i][i] = 1;while(k){if(k&1)tmp = multi(tmp, base);base = multi(base, base);k >>= 1;}return tmp;
}
int main()
{while(scanf("%d%d", &n, &m) != EOF){matrix ans, base;ans.mat[1][1] = 23;for(int i = 1; i <= n; i++)scanf("%d", &ans.mat[i+1][1]);ans.mat[n+2][1] = 3;for(int i = 1; i <= n+1; i++)base.mat[i][1] = 10;for(int i = 1; i <= n+2; i++)base.mat[i][n+2] = 1;for(int i = 2; i <= n+1; i++)for(int j = 2; j <= i; j++)base.mat[i][j] = 1;base = fast_mod(base, m);ans = multi(base, ans);cout << ans.mat[n+1][1] << endl;}return 0;
}

HDU5015 233 Matrix相关推荐

  1. Hdu5015 233 Matrix矩阵

    每一列能由前一列推过来,构造一个(n+2)*(n+2)的矩阵B,第k列 就等于  所构造的第一列A*B^(k-1) 比如 233                            10    10 ...

  2. hdu- 5015 233 Matrix

    http://acm.hdu.edu.cn/showproblem.php?pid=5015 题意:第一行给出了 233 2333 23333 233333 ...... 也给出了第一列的数 ,让你计 ...

  3. 233 Matrix HDU - 5015

    In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233 ...

  4. [矩阵乘法/快速幂专题]Arc of Dream,Recursive sequence,233 Matrix,Training little cats

    矩阵快速幂习题 复习矩阵乘法及快速幂模板 乘法模板 快速幂模板 T1:Arc of Dream 题目 题解 code T2:Recursive sequence 题目 题解 code T3:233 M ...

  5. 【HDU - 5015 】233 Matrix (矩阵快速幂)

    题干: In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or ...

  6. HDU 5015——233 Matrix

    题目:HDU 5015 233 Matrix 题目大意:给出矩阵的第0行(233,2333,23333,-)和第0列a1,a2,- an(n<=10,m<=10^9),给出式子: A[i] ...

  7. 【矩阵快速幂】233 Matrix HDU - 5015

    Think: 1知识点:矩阵快速幂 2题意:定义一个233矩阵,第一行形如233, 23333, 233333, 233-(即a[0][1] = 233, a[0][2] = 2333,a[0][3] ...

  8. HDU - 5015 233 Matrix(矩阵快速幂)

    题目链接:点击查看 题目大意:初始化:第一行依次为233,2333,23333....第一列依次为a0,a1,a2....(题目中会给出),再给出递推公式:,求矩阵中第n行m列的数字是多少 题目分析: ...

  9. poi导入excel日期处理_POI处理Excel中各种日期格式问题

    前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...

最新文章

  1. 【微服务架构】SpringCloud使用Ribbon实现负载均衡
  2. 【自动驾驶】10.百度Apollo平台 事件通信机制
  3. 【重复制造精讲】Backflush 倒冲介绍
  4. Python中比元组更好用的namedtuple
  5. Hadoop wordcount
  6. java antd实现登录,基于 antd pro 的短信验证码登录
  7. C#比较dynamic和Dictionary性能
  8. LeetCode 66. 加一
  9. 视觉测量为什么要考虑畸变
  10. HubbleDotNet 基本语法
  11. 山东理工——1019
  12. 防火门行业研究及十四五规划分析报告
  13. 如何成为一个区块链开发人员_关于成为远程开发人员的思考
  14. 用计算机编程做微信,电脑端微信双开,教你两种简单的方法,上手即用!
  15. mysql简单数据库定期备份
  16. Linux 安装Oracle10g
  17. English trip EM2-PE 3B Teacher:Olivia
  18. Windows 10设备的蓝牙不能连接了怎么办?
  19. 论文笔记:基于深度学习的遥感影像变化检测综述
  20. 基于HTML电商购物项目的设计与实现——html+css+javascript+jquery+bootstarp响应式图书商城

热门文章

  1. Infragistics Ignite UI for Web
  2. Java集合与泛型学习笔记
  3. 记录下Tesla V100s vmware EXTI 7.0 虚拟机直通显卡cuda、cudnn安装
  4. 程序人生—谈安全测试的重要性
  5. 微信公众号中的支付宝支付与微信支付 支付宝支付问题(微信bug)
  6. spring中@Value读取.properties配置文件中文乱码问题
  7. [UWP]使用Acrylic(亚克力)
  8. pip国内镜像解决no matching distribution found for XXX
  9. (三)Linux 用户和权限
  10. 求首尾相连数组的最大子序列和