http://acm.hdu.edu.cn/showproblem.php?pid=5015

矩阵是表示状态转移的利器

这题m很大,n非常小,所以开始的思考角度是能否从当前列推出下一列。有了这个角度,矩阵构造是很简单的

#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; typedef __int64 LL; #define MOD 10000007 #define Mat 15 //矩阵大小 struct mat{//矩阵结构体,a表示内容,r行c列 矩阵从1开始
LL a[Mat][Mat];
int r, c;
mat() {
r = c = ;
memset(a, , sizeof(a));
}
}; void print(mat m) {
//printf("%d\n", m.size);
for(int i = ; i < m.r; i++) {
for(int j = ; j < m.c; j++) printf("%d ", m.a[i][j]);
putchar('\n');
}
} mat mul(mat m1, mat m2, int mod) {
mat ans = mat();
ans.r = m1.r, ans.c = m2.c;
for(int i = ; i <= m1.r; i++)
for(int j = ; j <= m2.r; j++)
if(m1.a[i][j])
for(int k = ; k <= m2.c; k++)
ans.a[i][k] = (ans.a[i][k] + m1.a[i][j] * m2.a[j][k]) % mod;
return ans;
} mat quickmul(mat m, int n, int mod) {
mat ans = mat();
for(int i = ; i <= m.r; i++) ans.a[i][i] = ;
ans.r = m.r, ans.c = m.c;
while(n) {
if(n & ) ans = mul(m, ans, mod);
m = mul(m, m, mod);
n >>= ;
}
return ans;
} /*
初始化ans矩阵
mat ans = mat();
ans.r = R, ans.c = C;
ans = quickmul(ans, n, mod);
*/ int main() {
int n, m;
while(~scanf("%d%d", &n, &m)) {
int a = n + ;
mat A = mat();
A.r = , A.c = a;
A.a[][] = , A.a[][a] = ;
for(int i = ; i <= n+; i++)
scanf("%d", &A.a[][i]);
mat M = mat();
M.r = M.c = a;
for(int i = ; i < a; i++)
M.a[][i] = ;
for(int i = ; i <= a; i++)
M.a[a][i] = ;
for(int i = ; i < a; i++) {
for(int j = ; j < a; j++) {
if(j >= i) M.a[i][j] = ;
}
}
printf("%d\n", mul(A, quickmul(M, m, MOD), MOD).a[][n+]);
}
return ;
}

最新文章

  1. SQL Server表分区
  2. 判断用户是否是第一次打开该app
  3. TDR分辨率
  4. 第一零四天上课 PHP TP框架下的文件上传
  5. 自旋锁-SpinLock(.NET 4.0+)
  6. Atom 和 Sublime Text 相比哪个好?
  7. java数据结构和算法------冒泡排序
  8. 【转】XCode环境变量及路径设置 -- 待学习
  9. pom配置进行版本号统一管理
  10. 面试题_17_to_30_数据类型和 Java 基础面试问题
  11. loadView 与 ViewDidLoad
  12. String类扩展
  13. 浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
  14. 基于Visual C++2013拆解世界五百强面试题--题11-查找数字出现次数
  15. 蓝桥网试题 java 基础练习 十进制转十六进制
  16. 使用JavaScript实现简单的双色球
  17. Android之OkHttp详解
  18. 积极参与开源项目,促进.NET Core生态社区发展
  19. mysql中利用show profile很直观的看到查询缓存的作用。
  20. display: table-cell的实用应用

热门文章

  1. PSP记录个人项目耗时情况
  2. php 图片验证码生成 前后台验证
  3. 最少clock
  4. RHEL6.6 PXE安装-基于VMWare WorkStation
  5. php 循环删除目录中的过期文件
  6. java基础之 超类Object
  7. 006 复杂的数据类型&amp;函数(方法)
  8. C++之虚函数和多态
  9. 关于WebView的复习
  10. RGB与16进制颜色转换的原理