1 #include <cstdio> 2 #include <iostream> 3 #include <vector> 4 #include <cstring> 5 using namespace std; 6 // 矩阵的STL实现 7 typedef vector<int> vec; 8 typedef vector<vec> mat; 9 typedef long long ll; 10 const int MOD = 10000; 11 // 矩阵乘法 12 mat mul(mat &A,mat &B){ 13 mat C(A.size(),vec(B[0].size())); 14 for(int i = 0 ; i < A.size() ; i++) 15 for(int k = 0 ; k < B.size() ; k++) 16 for(int j = 0 ; j < B[0].size() ; j++) 17 C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD; 18 return C; 19 } 20 // 矩阵快速幂 21 mat pow(mat A,ll n){ 22 mat B(A.size(),vec(A.size())); 23 for(int i = 0 ; i < A.size() ; i++) 24 B[i][i] = 1; 25 while(n > 0){ 26 if(n & 1) B = mul(B,A); 27 A = mul(A,A); 28 n >>= 1; 29 } 30 return B; 31 }