Tr A hdu 1575数学问题
来源:互联网 发布:centos 编译安装lamp 编辑:程序博客网 时间:2024/04/29 17:19
Tr A
Problem Description
A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。
Input
数据的第一行是一个T,表示有T组数据。
每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
Output
对应每组数据,输出Tr(A^k)%9973。
Sample Input
2
2 2
1 0
0 1
3 99999999
1 2 3
4 5 6
7 8 9
Sample Output
2
2686
代码如下:
#include<stdio.h>
#include<string.h>
int k,n;
#define yu 9973
typedef struct Matrix
{
int a[12][12];
}matrix;
matrix p,q;
matrix compute(matrix A,matrix B)
{
int i,j,l;
matrix C;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
C.a[i][j]=0;
for(l=1;l<=n;l++)
C.a[i][j]+=(A.a[i][l]*B.a[l][j]);
C.a[i][j]%=yu;
}
return C;
}
void ss()
{
int kk=k;
int sum=0;
matrix pp,qq;
pp=p;qq=q;
while(kk!=1)
{
if(kk&1)
{
kk--;
pp=compute(pp,qq);
}
else
{
kk>>=1;
qq=compute(qq,qq);
}
}
pp=compute(pp,qq);
for(int i=1;i<=n;i++)
sum+=pp.a[i][i];
sum%=yu;
printf("%d/n",sum);
}
int main()
{
int t;
int i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&q.a[i][j]);
p.a[i][j]=(i==j);
}
ss();
}
return 0;
}
- Tr A hdu 1575数学问题
- Tr A hdu 1575
- hdu 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- hdu 1575 Tr A
- hdu 1575 Tr A
- hdu 1575 Tr A
- HDU 1575 Tr A
- HDU - 1575 Tr A
- hdu 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- hdu 1575 Tr A
- hdu 1575 Tr A
- 如果你想学好C#!就一定要看这个!对你很多帮助!
- 积极心理学
- HDUOJ1016 Prime Ring Problem
- 你见过这样的路由表吗?
- 动态规划解决最长公共子序列
- Tr A hdu 1575数学问题
- Cacti配置下的使用技巧
- 构造Liunx流媒体服务器(ZT)
- C++内存分区
- 跟Steve Jobs學簡報 ——蔡學鏞
- 聚类分析中分类数的确定问题
- 快毕业了
- sicily1137
- Mongodb 的ORM框架 Morphia 注解二 —————— @Id