zoukankan      html  css  js  c++  java
  • HDU1005(矩阵快速幂)

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

    #include<cstdio>
    using namespace std;
    int n,a,b;
    struct Matrix
    {
        int m[2][2];
        void init()
        {
            m[0][0] = a;
            m[0][1] = 1;
            m[1][0] = b;
            m[1][1] = 0;
        }
        void init0()
        {
            m[0][0] = a+b;
            m[0][1] = 1;
            m[1][0] = 1;
            m[1][1] = 1;
        }
        void init2()
        {
            m[0][0] = 1;
            m[0][1] = 0;
            m[1][0] = 0;
            m[1][1] = 1;
        }
        Matrix operator * (Matrix t)
        {
            Matrix res;
            for (int i = 0 ;i < 2; i++)
            {
                for (int j = 0 ;j < 2 ;j++)
                {
                    res.m[i][j] = 0;
                    for (int k = 0 ;k < 2 ;k++)
                        res.m[i][j] += (m[i][k] * t.m[k][j]);
                    res.m[i][j] %= 7;
                }
            }
            return res;
        }
    };
    Matrix quickpow(Matrix s,int k)
    {
        Matrix res;
        res.init2();
        while(k)
        {
            if(k & 1)
                res = res * s;
            k >>= 1;
            s = s * s;
        }
        return res;
    }
    int main()
    {
        while(scanf("%d %d %d",&a,&b,&n) && (a || b || n))
        {
            if(n == 1|| n == 2)
            {
                printf("1
    ");
                continue;
            }
            Matrix ans;
            ans.init0();
            Matrix t;
            t.init();
            ans = ans * quickpow(t ,n-2);
            printf("%d
    ",ans.m[0][1] % 7);
        }
        return 0;
    }
    


  • 相关阅读:
    I/O流
    宇宙第一帅的HTML笔记
    宇宙无敌第一帅的Java笔记
    Activity常用的方法
    Spinne
    安卓布局方式
    for循环
    TextView
    开发Activity步骤
    重写
  • 原文地址:https://www.cnblogs.com/westwind1005/p/5975197.html
Copyright © 2011-2022 走看看