标签:ati margin algo sample each cpp iostream height 构造矩阵
1 3 2 1 2 1 3 0
6Hintpossible patterns are ?, 1, 2, 3, 1→2, 2→3
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <cmath> #include <queue> #include <set> #include <map> #include <algorithm> #define LL long long using namespace std; const int MAXN = 55 + 10; const int mod = 2015; int n, m; struct Matrix { int m[MAXN][MAXN]; Matrix(){memset(m, 0, sizeof(m));} Matrix operator * (const Matrix &b)const { Matrix res; for(int i=1;i<=n+1;i++) { for(int j=1;j<=n+1;j++) { for(int k=1;k<=n+1;k++) { res.m[i][j] = (res.m[i][j] + m[i][k] * b.m[k][j]) % mod; } } } return res; } }; Matrix pow_mod(Matrix a, int b) { Matrix res; for(int i=1;i<=n+1;i++) res.m[i][i] = 1; while(b) { if(b & 1) res = res * a; a = a * a; b >>= 1; } return res; } int main() { int T; scanf("%d", &T); while(T--) { Matrix a, b; scanf("%d%d", &n, &m); for(int i=1;i<=n+1;i++) a.m[i][n+1] = 1; for(int i=1;i<=n;i++) { int x, k;scanf("%d", &k); for(;k--;) { scanf("%d", &x); a.m[i][x] = 1; } } a = pow_mod(a, m); int ans = 0; for(int i=1;i<=n+1;i++) ans = (ans + a.m[i][n+1]) % mod; printf("%d\n", ans); } return 0; }
HDU 5411 CRB and puzzle (Dp + 矩阵高速幂)
标签:ati margin algo sample each cpp iostream height 构造矩阵
原文地址:http://www.cnblogs.com/lxjshuju/p/6922509.html