hdu5015 矩阵快速幂233(好题)
题意:
给你一个(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 10000007 typedef 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; }
hdu5015 矩阵快速幂233(好题)相关推荐
- 51nod 1113 矩阵快速幂【裸题】【内含黑科技】
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...
- HDU - 4990 Reading comprehension(矩阵快速幂,水题)
题目链接:点击查看 题目大意:给出一段程序,进行优化后提交 题目分析:其实就是找规律,大水题一个,偶尔也是需要做做水题找找自信(逃) 先将题目中的程序拿下来,跑上100项,然后拿到oeis里找一下规律 ...
- HDU - 4686 Arc of Dream(矩阵快速幂,水题)
题目链接:点击查看 题目大意:给出定义: 现在依次给出n,A0,AX,AY,B0,BX,BY 求Aod的第n项对1e9+7取模后的结果 题目分析: 简单矩阵快速幂 首先化简一下: 初始矩阵:(取n=1 ...
- HDU - 1757 A Simple Math Problem(矩阵快速幂,水题)
题目链接:点击查看 题目大意:实现公式: f(x)=x,x<10 f(x)=a0*f(x-1)+a1*f(x-2)+--+a9*f(x-10) 题目给出a0~a9,一个n和一个m,要求输出f(n ...
- 又见斐波那契~矩阵快速幂入门题
链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...
- 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Little Witch Academia(矩阵快速幂)
题目链接:点击查看 题目大意:给出两种型号的瓷砖,尺寸分别是 a∗1a*1a∗1 和 b∗1b*1b∗1,现在需要填满 w∗hw*hw∗h 的矩阵,需要满足以下两个情况: 瓷砖不能旋转 相邻的两行中, ...
- generator 1【矩阵快速幂】
题目描述 You are given four positive integers x0,x1,a,bx_0, x_1, a, bx0,x1,a,b. And you know xi=a⋅xi−1 ...
- 矩阵快速幂的学习(系统的学习)
学习博客:https://www.cnblogs.com/cmmdc/p/6936196.html https://www.cnblogs.com/yan-boy/archive/2012/11/29 ...
- Tr A 矩阵快速幂
A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n(2 <= n <= ...
最新文章
- 5如何将表格的一行数据清空_微信公众号推文中如何自定义添加表格?
- php rfc3986规范,「PSR 规范」PSR-7 HTTP 消息接口规范
- Leetcode 252, 253. Meeting Rooms
- Pytorch 笔记——tensor
- Linux crontab命令
- 如何跨项目工作空间访问MaxCompute资源和函数?
- uniapp页面传参使用encodeURIComponent转义特殊符号
- 2.3.3单链表的双向链表
- html中灰色怎么写,css如何实现置灰不可点
- Nginx 配置一个虚拟站点
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )...
- linux vnc服务器6,Linux(RHEL6\CENTOS6\OLE6) 下VNC-SERVER安装与配置
- 私有云落地解决方案之网络篇-网络架构
- 天然气故障代码大全_天然气发动机故障代码表(20130101)
- nmds与mds的区别_常见分析方法 | PCA、PCoA和NMDS有什么区别?
- 常见的测试用例设计方法8---正交试验法
- INSERT INTO SELECT FROM 的用法
- 基于单幅图像的三维动物自动建模项目(The SMAL Model)学习笔记1
- 虚幻官方文档使用UMG(虚幻运动图像)的用户界面笔记[VS2019]
- 加权voronoi图 matlab,加权voronoi图matlab