• HDU 6470 【矩阵快速幂】


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6470

    写这道题是为了让自己不要忘记矩阵快速幂如何推出矩阵式子的。

    注意 代码是TLE的!!

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define mem(a, b) memset(a, b, sizeof(a))
     4 typedef long long ll;
     5 const int mod = 123456789;
     6 
     7 ll n;
     8 
     9 struct Matrix
    10 {
    11     ll a[10][10];
    12 }A, res, temp;
    13 
    14 Matrix Multiply(Matrix a, Matrix b)
    15 {
    16     Matrix ans;
    17     mem(ans.a, 0);
    18     for(int i = 1; i <= 6; i ++)
    19         for(int j = 1; j <= 6; j ++)
    20             for(int k = 1; k <= 6; k ++)
    21             {
    22                 ans.a[i][j] += a.a[i][k] * b.a[k][j] % mod;
    23                 ans.a[i][j] %= mod;
    24             }
    25     return ans;
    26 }
    27 
    28 int main()
    29 {
    30     mem(A.a, 0);  //构造矩阵 
    31     A.a[1][2] = A.a[2][2] = A.a[2][3] = A.a[3][3] = A.a[3][6] = A.a[4][4] = A.a[4][6] = A.a[5][5] = A.a[5][6] = A.a[6][6] = 1;
    32     A.a[2][1] = A.a[4][5] = 2;
    33     A.a[3][4] = A.a[3][5] = 3;
    34     int T;
    35     scanf("%d", &T);
    36     while(T --)
    37     {
    38         temp = A;  //初始化temp矩阵 
    39         mem(res.a, 0); //初始化为单位矩阵 
    40         for(int i = 1; i <= 6; i ++)
    41             res.a[i][i] = 1;
    42         scanf("%lld", &n);
    43         n -= 2;
    44         while(n)
    45         {
    46             if(n % 2)
    47                 res = Multiply(res, temp);
    48             temp = Multiply(temp, temp);
    49             n /= 2;
    50         }
    51         printf("%lld
    ", (1 * res.a[2][1] % mod + 2 * res.a[2][2] % mod + 27 * res.a[2][3] % mod + 9 * res.a[2][4] % mod + 3 * res.a[2][5] % mod + res.a[2][6] % mod) % mod);
    52     }
    53     return 0;
    54 }
    View Code

     

  • 相关阅读:
    求列表中指定元素的位置
    Hash_P1026毒药?解药?
    Hash_集合
    bzoj1483: [HNOI2009]梦幻布丁
    bzoj1724: [Usaco2006 Nov]Fence Repair 切割木板
    容斥原理
    bzoj1042: [HAOI2008]硬币购物
    [Noi2016十连测第五场]二进制的世界
    NOI2016模拟赛Zbox loves stack
    bzoj2038: [2009国家集训队]小Z的袜子(hose)
  • 原文地址:https://www.cnblogs.com/yuanweidao/p/11729865.html
Copyright © 2020-2023  润新知