HDU 5015 233 Matrix / 2014 ACM/ICPC Asia Regional Xi'an Online
来源:互联网 发布:php采集cookie设置 编辑:程序博客网 时间:2024/04/29 17:54
题目: LINK
此题可以用矩阵快速幂做
用行向量[a1, b2, a3, a4, .... 233, 3] ,n+2个元素
再构造n+2 的方阵
1 1 1 1 ..... 0 0
0 1 1 1 ..... 0 0
0 0 1 1 ..... 0 0
0 0 0 1 ..... 0 0
................
1 1 1 1 ..... 10 0
0 0 0 0 ..... 1 1
左上角的n大小的方阵是上三角行的,多加的两列是为了控制233....33的,每次都可以算出来,
求方阵的m次幂,用初始行向量乘以结果方阵的第n列,就是结果了.
模拟一下就知道为什么这么做了.
#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <string>#include <vector>#include <cmath>#include <queue>#include <map>#include <set>using namespace std; #define INF 1000000000typedef __int64 LL; #define N 15LL n, m, num[N]; #define mod 10000007struct node {LL mat[N][N]; }; node mul(node x, node y) { node ret; memset(ret.mat, 0, sizeof(ret.mat)); for(int i=1; i<=n+2; i++) { for(int j=1; j<=n+2; j++) { for(int k = 1; k<=n+2; k++) { ret.mat[i][j] += x.mat[i][k]*y.mat[k][j]; ret.mat[i][j] %= mod; } } } return ret ; } node pow_(node x, LL y) { node ret; for(int i = 0; i <= n+2; i++) {for(int j = 0; j <= n+2; j++) {if(i == j) ret.mat[i][j] = 1; else ret.mat[i][j] = 0; }} while(y) { if(y&1) { ret = mul(ret, x); } y>>=1; x = mul(x, x); } return ret; } int main() {#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin); #endif // ONLINE_JUDGEwhile(scanf("%I64d%I64d", &n, &m) != EOF) {for(int i = 1; i <= n; i++) scanf("%I64d", &num[i]); node S;memset(S.mat, 0, sizeof(S.mat)); for(int i = 1; i <= n; i++) {for(int j = n; j >= i; j--) S.mat[i][j] = 1; }for(int i = 1; i <= n; i++) S.mat[n+1][i] = 1; S.mat[n+1][n+1] = 10; S.mat[n+2][n+1] = S.mat[n+2][n+2] = 1; S = pow_(S, m); LL ans = 0; for(int i = 1; i <= n; i++) ans += num[i] * S.mat[i][n] % mod, ans %= mod; ans += (LL)233 * S.mat[n+1][n]; ans %= mod; ans += (LL) 3 * S.mat[n+2][n]; ans %= mod; printf("%I64d\n", ans); }return 0; }
0 0
- hdu 5015 233 Matrix 2014 ACM/ICPC Asia Regional Xi'an Online 矩阵快速幂
- HDU 5015 233 Matrix / 2014 ACM/ICPC Asia Regional Xi'an Online
- 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix,hdu 5015
- hdu 5015 233 Matrix 矩阵快速幂 2014 ACM/ICPC Asia Regional Xi'an Online
- HDU 5015 2014 ACM/ICPC Asia Regional Xi'an Online 233 Matrix
- Hdu 5015 233 Matrix[矩阵](2014 ACM/ICPC Asia Regional Xi'an Online )
- hdu 1009 233 Matrix 矩阵构造 --2014 ACM/ICPC Asia Regional Xi'an Online
- HDU5015 233 Matrix (2014 ACM/ICPC Asia Regional Xi'an Online)
- 2014 ACM/ICPC Asia Regional Xi'an Online 小记
- 2014 ACM/ICPC Asia Regional Xi'an Online
- 2014 ACM/ICPC Asia Regional Xi'an Online(hdu 5007 - hdu 5017)
- hdu 5012 Dice 2014 ACM/ICPC Asia Regional Xi'an Online bfs
- hdu 5014 Number Sequence 2014 ACM/ICPC Asia Regional Xi'an Online 数论
- HDU 5014 Number Sequence 贪心 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5014 Number Sequence 找规律 | 贪心 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5008(2014 ACM/ICPC Asia Regional Xi'an Online ) Boring String Problem(后缀数组&二分)
- hdu 5011 Game Nim博弈 2014 ACM/ICPC Asia Regional Xi'an Online
- hdu 5007 Post Robot 水题 2014 ACM/ICPC Asia Regional Xi'an Online
- 机房的问题(一)
- 2014 西安赛区网络赛 5012Dice
- net start mysql启动mysql,提示发生系统错误5拒绝访问解决方法
- 嵌入式Boa服务器gethostbyname:: Success解决办法
- 编程之美:第一章 1.2 中国象棋将帅问题
- HDU 5015 233 Matrix / 2014 ACM/ICPC Asia Regional Xi'an Online
- 牛腩新闻发布系统——坎坷的验证码
- android 四种启动模式
- 由strlen引出的一些
- 编程之美:第一章 1.3 一摞烙饼的排序
- 二维图形几何变换
- 亚马逊危险了!面临创业公司和科技巨头的颠覆
- Longest Valid Parentheses[leetcode] 的三种解法
- 二分查找