题目大意:意思就是让求A(A是矩阵)+A2+A3+A4+A5+A6+······+AK,其中矩阵范围n<=40,k<=1000000。

解题思路:由于k的取值范围很大,所以很自然地想到了二分法,用递归逐步将k二分(公式:A+A2+A3+A4+A5+A= A+A2+A+ A3(A+A2+A3)),

  这种方法只需要注意k是奇数的情况就可以了。

  最坑的是第二种方法,根据矩阵的性质可以构造出来一个子矩阵,假如有矩阵B=|A  E| ,那么B=|AK   E+ A+A2+A3+A4+A5+A6+······+AK|

|0  E|                |0          E                                         |

  呵呵········,这种方法wa了好多次,我曾经开始怀疑线性代数老师是不是讲错了。最后在T巨的提醒下发现 然后还有结束标志,还有每个实例后面都有一个换行。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = ;
int n;
struct mat
{
int p[maxn][maxn];
};
mat mul (mat a, mat b)
{
int i, j, k, m;
m = n * ;
mat c;
memset (c.p, , sizeof(c.p));
for (i=; i<m; i++)
for (j=; j<m; j++)
{
for (k=; k<m; k++)
c.p[i][j] += a.p[i][k] * b.p[k][j];
c.p[i][j] = c.p[i][j] % ;
}
return c;
} mat pow (int n, mat a, mat b)
{
while (n)
{
if (n % )
{
b = mul (b, a);
}
n /= ;
a = mul (a, a);
}
return b;
} int main ()
{
int k;
while (scanf ("%d %d", &n, &k))
{
if (!n)
break;
mat a, b;
memset (b.p, , sizeof(b.p));
memset (a.p, , sizeof(a.p)); for (int i=; i<n; i++)
for (int j=; j<n; j++)
{
scanf ("%d", &a.p[i][j]);
a.p[i][j] = a.p[i][j] % ;
} for (int i=; i<n; i++)//构造矩阵,使a矩阵的右上,右下成为单位矩阵,把b也初始化为单位矩阵
a.p[i][i+n] = a.p[i+n][i+n] = b.p[i][i] = b.p[i+n][i+n] = ; b = pow (k+, a, b);
for (int i=; i<n; i++)
for (int j=; j<n; j++)
{
if (i == j)//在b右上角的那个矩阵减去一个单位矩阵
{
b.p[i][j+n] --;
if (b.p[i][j+n] < )//防止出现末尾是零,减去单位矩阵是-1的情况。
b.p[i][j+n] = ;
}
if (j == n-)
printf ("%d\n", b.p[i][j+n]);
else
printf ("%d ", b.p[i][j+n]);
}
printf ("\n");
}
return ;
}

最新文章

  1. Java进击C#——应用开发之WinForm开发
  2. Yii2 事务
  3. sbt的assembly插件使用(打包所有依赖)
  4. PCRE正则库的使用
  5. DATAGUARD中手工处理日志v$archive_GAP的方法
  6. Spring properties dependency checking
  7. visio
  8. 问题-关于SizeOf在Delphi7和Delphi2009下结果分别是16/32
  9. MongoDB(四)——管理架构
  10. UVA它11292 - Dragon of Loowater
  11. maven学习笔记 1
  12. Burp_用户名密码爆破
  13. 我们为什么要用springcloud?
  14. Angular记录(1)
  15. (转)Windows10下的docker安装与入门 (一)使用docker toolbox安装docker
  16. Centos6.5系统压力测试过程大量TIME_WAIT
  17. 习题 6 字符串(string)和文本
  18. PHP之错误
  19. openstack的网络、子网、端口的关系
  20. UOJ#316. 【NOI2017】泳池

热门文章

  1. 附加数据库时,提示“Microsoft SQL Server,错误: 5120”, 解决方案
  2. tomcat的安装和使用
  3. HDU1087 Super Jumping! Jumping! Jumping!(LIS)
  4. 【转】AOP
  5. XMLHttpRequest对象解读
  6. Ulua_toLua_基本案例(一)
  7. Native进程之Trace原理(转)——可直接输出某进程的栈帧——debuggerd
  8. ReLu(修正线性单元)、sigmoid和tahh的比较
  9. react-loadable 进行代码分割的基本使用
  10. windows下使用mingw和msys编译GOTOBLAS和OpenBLAS