zoukankan      html  css  js  c++  java
  • AC日记——3的幂的和 51nod 1013

    3的幂的和

    思路;

      矩阵快速幂;

        sn-1      3 1        sn

          *          =

      1      0 1     1

    来,上代码:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define mod 1000000007
    
    struct NodeType {
        long long a[3][3];
    };
    struct NodeType ans;
    
    long long n;
    
    struct NodeType mul(NodeType pos)
    {
        NodeType res;
        res.a[1][1]=0,res.a[1][2]=0;
        res.a[2][1]=0,res.a[2][2]=0;
        for(int i=1;i<=2;i++)
        {
            for(int j=1;j<=2;j++)
            {
                for(int v=1;v<=2;v++)
                {
                    res.a[i][j]=(res.a[i][j]+(pos.a[i][v]*pos.a[v][j])%mod)%mod;
                }
            }
        }
        return res;
    }
    
    void poww(int mi)
    {
        NodeType pos;
        pos.a[1][1]=3,pos.a[1][2]=1;
        pos.a[2][1]=0,pos.a[2][2]=1;
        while(mi>0)
        {
            struct NodeType res;
            res.a[1][1]=0,res.a[1][2]=0;
            res.a[2][1]=0,res.a[2][2]=0;
            if(mi&1)
            {
                for(int i=1;i<=2;i++)
                {
                    for(int j=1;j<=2;j++)
                    {
                        for(int v=1;v<=2;v++)
                        {
                            res.a[i][j]=(res.a[i][j]+(ans.a[i][v]*pos.a[v][j])%mod)%mod;
                        }
                    }
                }
                ans=res;
            }
            pos=mul(pos),mi=mi>>1;
        }
    }
    
    int main()
    {
        scanf("%lld",&n);n--;
        ans.a[1][1]=3,ans.a[1][2]=1;
        ans.a[2][1]=0,ans.a[2][2]=1;
        poww(n);
        cout<<(ans.a[1][1]+ans.a[1][2])%mod;
        return 0;
    }
  • 相关阅读:
    POJ 2486
    奇怪的电梯
    穿越泥地(mud)
    救援行动(save)
    As Fast As Possible
    Connecting Universities
    They Are Everywhere
    Cells Not Under Attack
    吃饭
    花店橱窗(flower)
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6746831.html
Copyright © 2011-2022 走看看