HDOJ 6030 矩阵快速幂

链接:

http://acm.hdu.edu.cn/showproblem.php?pid=6030

题意:

给一个手链染色,每连续素数个数的珠子中红色不能比蓝的多,问有多少种情况

题解:

公式为f[i]=f[i-1]+f[i-3],类似菲波那切数列,使用矩阵快速幂即可

代码:

31 typedef vector<ll> vec;
32 typedef vector<vec> mat;
33
34 mat mul(mat &A, mat &B) {
35     mat C(A.size(), vec(B[0].size()));
36     rep(i, 0, A.size()) rep(k, 0, B.size()) rep(j, 0, B[0].size())
37         C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD;
38     return C;
39 }
40
41 mat pow(mat A, ll n) {
42     mat B(A.size(), vec(A.size()));
43     rep(i, 0, A.size()) B[i][i] = 1;
44     while (n>0) {
45         if (n & 1) B = mul(B, A);
46         A = mul(A, A);
47         n >>= 1;
48     }
49     return B;
50 }
51
52 int main() {
53     int T;
54     cin >> T;
55     while (T--) {
56         mat A(3, vec(3));
57         A[0][0] = 1, A[0][1] = 0, A[0][2] = 1;
58         A[1][0] = 1, A[1][1] = 0, A[2][2] = 0;
59         A[2][0] = 0, A[2][1] = 1, A[2][2] = 0;
60         ll n;
61         cin >> n;
62         A = pow(A, n - 2);
63         ll ans = (A[2][0] * 6 + A[2][1] * 4 + A[2][2] * 3) % MOD;
64         cout << ans << endl;
65     }
66     return 0;
67 }
时间: 2024-10-19 10:39:21

HDOJ 6030 矩阵快速幂的相关文章

【HDOJ 4686】 Arc of Dream (矩阵快速幂)

[HDOJ 4686] Arc of Dream (矩阵快速幂) 两个公式 a(i) = a(i-1)*Ax+Ay b(i) = b(i-1)*Bx+By 求 0~(n-1) 的a(i)*b(i) 初始矩阵为                                       求幂矩阵为 a0                                                      Ax          0           0          0        

矩阵快速幂 HDOJ 5318 The Goddess Of The Moon

题目传送门 1 /* 2 DP::dp[i][k] 表示选择i个字符串,最后一次是k类型的字符串,它由sum (dp[i-1][j]) (a[j], a[k] is ok)累加而来 3 矩阵快速幂:将n个字符串看成n*n的矩阵,如果匹配,矩阵对应位置为1.矩阵缩短递推dp时间,然后乘m-1次(dp[m][i])累加即可 4 注意去重 5 详细解释:http://blog.csdn.net/keshuai19940722/article/details/47111215 6 */ 7 #inclu

(hdu 6030) Happy Necklace 找规律+矩阵快速幂

题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6030 Problem Description Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of multiple red and blue beads. Little Q desperately wants to impress his girlfriend,

HDOJ Arc of Dream 4686【矩阵快速幂】

Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 3126    Accepted Submission(s): 982 Problem Description An Arc of Dream is a curve defined by following function: where a0 = A0 ai =

HDOJ 4549 M斐波那契数列 费马小定理+矩阵快速幂

MF( i ) = a ^ fib( i-1 ) * b ^ fib ( i )   ( i>=3) mod 1000000007 是质数 , 根据费马小定理  a^phi( p ) = 1 ( mod p )  这里 p 为质数 且 a 比 p小 所以 a^( p - 1 ) = 1 ( mod p ) 所以对很大的指数可以化简  a ^ k % p  == a ^ ( k %(p-1) ) % p 用矩阵快速幂求fib数后代入即可 M斐波那契数列 Time Limit: 3000/1000

HDOJ 4686 Arc of Dream 矩阵快速幂

矩阵快速幂: 根据关系够建矩阵 , 快速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 2164    Accepted Submission(s): 680 Problem Description An Arc of Dream is a curve defined by following fun

HDOJ Queuing 2604【求矩阵+矩阵快速幂】

Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3528    Accepted Submission(s): 1590 Problem Description Queues and Priority Queues are data structures which are known to most computer

HDOJ M斐波那契数列 4549【矩阵快速幂+快速幂+费马小定理+欧拉函数】

M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2096    Accepted Submission(s): 596 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给

HDOJ 2294 - Pendant(DP+矩阵快速幂)

题目链接 题意:有个高富帅,要送个很装逼的吊坠给他女朋友.他有k种珠子,然后要串成一个珠子个数小于等于n 的链子(k种珠子都必须要用到).输入n和k,输出他可以做出多少种不一样的项链. 思路:可以想到递推式f(x, y) = f(x – 1, y) * y + f(x – 1, y – 1) * (k – y + 1)(表示x个珠子用了y种类型),因为n过大,无法直接求出来,所以要使用矩阵快速幂. GG队友的思路 代码: #include <iostream> #include <cst