题目:
题解:
const int MOD = 1000000007;
struct Matrix {
long mat[6][6];
int row, col;
};
struct Matrix multiply(struct Matrix a, struct Matrix b) {
int rows = a.row, columns = b.col, temp = b.row;
struct Matrix c;
memset(c.mat, 0, sizeof(c.mat));
c.row = rows, c.col = columns;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
for (int k = 0; k < temp; k++) {
c.mat[i][j] += a.mat[i][k] * b.mat[k][j];
c.mat[i][j] %= MOD;
}
}
}
return c;
}
struct Matrix matricPow(struct Matrix mat, int n) {
struct Matrix ret = {{{1, 0, 0, 0, 0, 0}}, 1, 6};
while (n > 0) {
if ((n & 1) == 1) {
ret = multiply(ret, mat);
}
n >>= 1;
mat = multiply(mat, mat);
}
return ret;
}
int checkRecord(int n) {
struct Matrix mat = {{{1, 1, 0, 1, 0, 0}, {1, 0, 1, 1, 0, 0}, {1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0}, {0, 0, 0, 1, 0, 1}, {0, 0, 0, 1, 0, 0}}, 6, 6};
struct Matrix res = matricPow(mat, n);
long sum = 0;
for (int i = 0; i < res.col; i++) {
sum += res.mat[0][i];
}
return (int)(sum % MOD);
}
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » C语言 | Leetcode C语言题解之第552题学生出勤记录II
发表评论 取消回复