HDU 1575 EASY

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int n,M=9973;
struct Matrax {
    int m[15][15];
};

Matrax a,per;

void initial(){
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&a.m[i][j]);
            a.m[i][j]%=M;
            per.m[i][j]=(i==j);
        }
    }
}

Matrax multi(Matrax a,Matrax b){
    Matrax c;
    int k,i,j;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            c.m[i][j]=0;
            for(k=0;k<n;k++){
                c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%M;
            }
            c.m[i][j]%=M;
        }
    }
    return c;
}

Matrax Power(int k){
    Matrax c,p,ans=per;
    p=a;
    while(k){
        if(k&1){
            ans=multi(ans,p);
            k--;
        }
        else {
            k/=2;
            p=multi(p,p);
        }
    }
    return ans;
}

int main(){
	int t,k;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&k);
		initial();
		Matrax ans=Power(k);
		int ant=0;
		for(int i=0;i<n;i++)
		ant=(ant+ans.m[i][i])%M;
		printf("%d\n",ant);
	}
	return 0;
}

  

时间: 2024-10-10 13:53:46

HDU 1575 EASY的相关文章

矩阵快速幂——将运算推广到矩阵上HDU 1575

/* 本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式 最后通过计算就可以得到一个符合题目要求的矩阵, 然后就是将矩阵上面所有的对角线元素相加 得到的结果即为所求的目标 */ #include<cstdio>  #include<cstring>  using namespace std;  const int maxn = 15;  #define mod 9973  int res[maxn][maxn];  int n;  void mul(int a[]

hdu So Easy!

So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2026    Accepted Submission(s): 624 Problem Description A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the cei

HDU 1575 &amp;&amp; 1757 矩阵快速幂&amp;&amp;构造矩阵入门

HDU 1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2912    Accepted Submission(s): 2167 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据.每组

HDU 1575 Tr A(矩阵高速幂)

题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如以下: #include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #i

HDU 别easy在一系列的

别easy在一系列的 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 101   Accepted Submission(s) : 38 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 大家经常感慨,要做好一件事情真的不easy,确实,

题解报告:hdu 1575 Tr A

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 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 对应每组数据

HDU 1575 Tr A 【矩阵经典2 矩阵快速幂入门】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7572    Accepted Submission(s): 5539 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要

HDU 4359 Easy Tree DP?

Easy Tree DP? Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1487    Accepted Submission(s): 567 Problem Description A Bear tree is a binary tree with such properties : each node has a value o

HDU 1575 Tr A(矩阵快速幂)

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5537    Accepted Submission(s): 4161 Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据.每组数据的第一行有n(2 <=