标签:
Description
Input
Output
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 <cstdio> #include <cstring> using namespace std ; #define LL __int64 #define MOD 9973 struct node{ __int64 a[12][12] ; int n ; }; node mul(node p,node q) { node s ; s.n = p.n ; int i , j , k , l ; for(i = 0 ; i < p.n ; i++) for(j = 0 ; j < p.n ; j++) { s.a[i][j] = 0 ; for(k = 0 ; k < p.n ; k++) s.a[i][j] = (s.a[i][j] + p.a[i][k]*q.a[k][j]%MOD) % MOD ; } return s ; } node pow(node p,int k) { if( k == 2 ) return mul(p,p) ; if( k == 1 ) return p ; node q = pow(p,k/2) ; q = mul(q,q) ; if( k%2 ) q = mul(q,p) ; return q ; } int main() { int t , n , k , ans ; int i , j ; node p ; scanf("%d", &t) ; while( t-- ) { scanf("%d %d", &n, &k) ; for(i = 0 ; i < n ; i++) for(j = 0 ; j < n ; j++) scanf("%I64d", &p.a[i][j]) ; p.n = n ; p = pow(p,k) ; ans = 0 ; for(i = 0 ; i < n ; i++) ans = ( ans + p.a[i][i] ) % MOD ; printf("%d\n", ans) ; } return 0; }
标签:
原文地址:http://blog.csdn.net/winddreams/article/details/42773559