zoukankan      html  css  js  c++  java
  • Lucky Sequence[SRM403DIVI500]

    1. 将所有Lucky Number按照(4,4),(4,7),(7,4),(7,7)分类,分别计算不重复的数的个数存于矩阵中:
        ---------------
        | (4,4) | (4,7) |
        ---------------      ====>    A
        | (7,4) | (7,7) |
        ---------------
    2. 求长度为length的Lucky Sequence的个数。这里应用矩阵乘法即可达到求解的目的。
       (如:(4,4) = (4,4)*(4,4) + (4,7)*(7,4))
       length = 1: return A
       length = 2: return A * A
       ......
       length = n: return A*A*...*A (即A^n)
       
       若length为偶数:
             A*A*A*...*A   => (A*A)*(A*A)*...*(A*A)
                                  => (A^2)*(A^2)*...*(A^2)
                                  => (A^4)*(A^4)*...*(A^4)
                                  => ......
                                  => (A^(n/2)) * (A^(n/2))
                                  => A^n
       若length为奇数:
             A*A*A*...*A  => A*(A*A*A*...*A) => ...
                                 => A*(A^((n-1)/2) * A^((n-1)/2))
       由此可得:

     1private long[,] pow(long[,] a, int k){
     2    if(k == 0{
     3        //单位矩阵
     4        long[,] res = new long[2,2];
     5        res[0,0= 1;
     6        res[1,1= 1;
     7        return res;
     8    }

     9    if(k % 2 == 0{
    10        return pow(mul(a,a), k/2);
    11    }
     else {
    12        return mul(a, pow(a, k-1));
    13    }

    14}

    15// long[,] mul(long[,], long[,]);// 矩阵乘法
        最后将矩阵各个元素累加即是最后结果

    用矩阵乘法来求解,code能写的非常漂亮。可惜,“我只猜中了故事开头,却没猜到故事的结局”。
  • 相关阅读:
    1951: [Sdoi2010]古代猪文
    BZOJ 1911: [Apio2010]特别行动队[斜率优化dp]
    BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫队算法
    gdb命令整理
    1833: [ZJOI2010]count 数字计数
    1227: [SDOI2009]虔诚的墓主人
    P3197 [HNOI2008]越狱
    3505: [Cqoi2014]数三角形
    P3414 SAC#1
    3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
  • 原文地址:https://www.cnblogs.com/dust/p/1211592.html
Copyright © 2011-2022 走看看