HDU 5015 233 Matrix 矩阵快速幂
题意就是
现在有一个矩阵a,矩阵的第一行和第一列(出了a[0][0]) 给你, 让你求a[n][m]
第一行是 a[0][1] = 233 , a[0][2] = 2333 , a[0][i] = a[0][i-1] * 10 + 3
a[i][j] = a[i-1][j] + a[i][j-1]
看题目:应该是矩阵快速幂了
举个例子:
输入:
3 1
23 47 16
我们手推一下a[3][1]
那a[1][2] = 2333 + 23 + 233
所以我们初始矩阵是一个 (1)列(n +2)行的矩阵
当n是3的时候 初始矩阵为
然后用来快速幂的矩阵为
n为3的时候 m=1的时候
然后就是愉快的撸代码了
//
// HDU5015 - 233Matrix.cpp
// 数论
//
// Created by Terry on 2018/10/1.
// Copyright © 2018年 Terry. All rights reserved.
//#include <stdio.h>
typedef long long LL;
long long read(){long long x = 0, f = 1;char ch=getchar();while(ch < '0' || ch > '9'){if(ch=='-') f = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}return x * f;
}
const int maxn = 12;
const long long mod = 10000007;
struct Matrix{long long m[maxn][maxn];
}unit;
long long int N, M;
Matrix operator * (Matrix a, Matrix b){Matrix ret;LL x;long long int n = N + 2; // [0 - N+1][0 - N+1]for(int i = 0; i < n; ++i){for(int j = 0; j < n; ++j){x = 0;for(int k = 0; k < n; ++k){x += ((LL)a.m[i][k] * b.m[k][j]) % mod;}ret.m[i][j] = (x) % mod;}}return ret;
}
void init_unit(){// 单位矩阵for(int i = 0; i < maxn; ++i){unit.m[i][i] = 1;}
}
Matrix pow_mat(Matrix a, LL n){Matrix ans = unit;while (n) {if(n & 1){ans = ans * a;}a = a * a;n >>= 1;}return ans;
}
int main(){init_unit();while (scanf("%lld%lld", &N, &M) != EOF) {Matrix ans, a;ans.m[0][0] = 23;for(int i = 1; i <= N; ++i){ans.m[0][i] = read();}ans.m[0][N + 1] = 3;// 构造快速幂用的矩阵long long int x = N + 1;for(int i = 0; i <= x; i++){for(int j = 0; j <= x; j++){a.m[i][j] = 0;}}for(int i = 0; i < x; i++){a.m[0][i] = 10;a.m[x][i] = 1;}a.m[x][x] = 1;for(int i = 1; i < x; i++){for(int j = 1; j <= i; j++){//printf("%d %d\n", j, i);a.m[j][i] = 1;}}// 求a[n][m]a = pow_mat(a, M);ans = ans * a;printf("%lld\n", ans.m[0][N] % mod);}return 0;
}
HDU 5015 233 Matrix 矩阵快速幂相关推荐
- HDU - 5015 233 Matrix(矩阵快速幂)
题目链接:点击查看 题目大意:初始化:第一行依次为233,2333,23333....第一列依次为a0,a1,a2....(题目中会给出),再给出递推公式:,求矩阵中第n行m列的数字是多少 题目分析: ...
- HDU 5015——233 Matrix
题目:HDU 5015 233 Matrix 题目大意:给出矩阵的第0行(233,2333,23333,-)和第0列a1,a2,- an(n<=10,m<=10^9),给出式子: A[i] ...
- Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)
题目链接 F[1] = a, F[2] = b, F[i] = 2 * F[i-2] + F[i-1] + i ^ 4, (i >= 3) 现在要求F[N] 类似于斐波那契数列的递推式子吧, 但 ...
- HDU 2256Problem of Precision(矩阵快速幂)
题意 求$(\sqrt{2} + \sqrt{3})^{2n} \pmod {1024}$ $n \leqslant 10^9$ Sol 看到题解的第一感受:这玩意儿也能矩阵快速幂??? 是的,它能q ...
- hdu 2842 Chinese Rings 矩阵快速幂
分析: 后面的环能不能取下来与前面的环有关,前面的环不被后面的环所影响.所以先取最后面的环 设状态F(n)表示n个环全部取下来的最少步数 先取第n个环,就得使1~n-2个环属于被取下来的状态,第n-1 ...
- HDU - 4990 Reading comprehension(矩阵快速幂,水题)
题目链接:点击查看 题目大意:给出一段程序,进行优化后提交 题目分析:其实就是找规律,大水题一个,偶尔也是需要做做水题找找自信(逃) 先将题目中的程序拿下来,跑上100项,然后拿到oeis里找一下规律 ...
- HDU (1575)Tr A ---矩阵快速幂
Tr A Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每 ...
- 考研路茫茫――单词情结 HDU - 2243(ac自动机 + 矩阵快速幂)
考研路茫茫--单词情结 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 【矩阵快速幂】233 Matrix HDU - 5015
Think: 1知识点:矩阵快速幂 2题意:定义一个233矩阵,第一行形如233, 23333, 233333, 233-(即a[0][1] = 233, a[0][2] = 2333,a[0][3] ...
- 【HDU - 4990】 Reading comprehension (构造+矩阵快速幂)
题干: Read the program below carefully then answer the question. #pragma comment(linker, "/STACK ...
最新文章
- 微信公众号为指定openid用户推送消息
- 浅谈GCC预编译头技术
- 配置VMware ESXi 5事件发送到SYSLOG服务器
- Linux系统运维工程师PDF文档精选
- .net core i上 K8S(二)运行简单.netcore程序
- 编程之美-最短摘要的生成方法整理
- Metasploit渗透某高校域服务器
- 程序自删除方法大总结
- android write file,Android Study Day 3 --Android File Read And Write
- log4j使用方法--视频地址: http://www.letv.com/ptv/pplay/11475
- eight_queens
- android播放器录制视频,Android播放器的录制实践
- matlab如何求空间一点到直线距离,空间点到直线距离怎么求
- 2021年人口普查结果分析
- keil5实现51单片机和stm32同时编辑
- Windbg命令学习1(vertarget和lm和lmvm)
- android m4a播放器,如何在android上解码m4a音频
- [iOS]分享文件到QQ好友或微信好友
- 报错:<generator object <genexpr> at 0x7fa9adc46eb0>
- 如何发表高质量的学术论文(硕士、博士均有参考价值)