• poj3070


    矩阵第一题。也是矩阵的模板题。下面是模板。

    比较重要的是,矩阵的乘法会有很多很神奇的用法。比如如下几个网站所讲。

    http://www.matrix67.com/blog/archives/276   这是Matrix67大神的网站。

    http://wenku.baidu.com/view/cec297c7bb4cf7ec4afed0f1.html?qq-pf-to=pcqq.c2c

    http://wenku.baidu.com/view/42f0080c4a7302768e99390d.html?qq-pf-to=pcqq.c2c

    #include <iostream>

    using namespace std;

    #define MAXN 2
    #define LL long long
    #define mod 10000

    class Matrix
    {
    public:

        long long m[MAXN][MAXN];
        //二维数组存放矩阵 
        Matrix(){}
        //对数组的初始化 
        void init(long long  num[MAXN][MAXN]){
            for (int i = 0; i < MAXN; i++){
                for (int j = 0; j < MAXN; j++){
                    m[i][j] = num[i][j];
                }
            }
        }
        //重载矩阵的乘法运算 

        friend Matrix operator*(Matrix &m1, Matrix &m2) {
            int i, j, k;
            Matrix temp;
            for (i = 0; i < MAXN; i++) {
                for (j = 0; j < MAXN; j++) {
                    temp.m[i][j] = 0;
                    for (k = 0; k < MAXN; k++)
                        temp.m[i][j] += (m1.m[i][k] * m2.m[k][j])%mod;
                    temp.m[i][j] %= mod;
                    //注意每一步都进行取模 
                }
            }
            return temp;
        }
        //矩阵的快速幂 

        friend Matrix quickpow(Matrix &M, long long n){
            Matrix tempans;
            //初始化为单位矩阵 
            //初始化 
            for (int i = 0; i < MAXN; i++){
                for (int j = 0; j < MAXN; j++){
                    if (i == j)
                        tempans.m[i][j] = 1;
                    else
                        tempans.m[i][j] = 0;
                }
            }
            //快速幂(类似整数) 
            while (n)
            {
                if (n & 1)
                    tempans = tempans * M;
                //已经重载了* 
                n = n >> 1;
                M = M * M;
            }
            return tempans;
        }
    };

    int main()
    {

        LL n;
        while (cin >> n &&n != -1)
        {
            Matrix M;
            LL mm[MAXN][MAXN] = { 1110 };
            M.init(mm);
            Matrix temp = quickpow(M, n);
            cout << temp.m[1][0] << endl;
        }
    }


  • 相关阅读:
    如何用机器学习强化市场营销活动。
    大数据统计脚本, 分城市订单统计
    宇宙常量与增长黑客。
    病毒传播效果的衡量公式
    浅谈对增长黑客的理解
    大数据分析, 数据挖掘, 机器学习,找到产品改进的爆点。
    R语言的日期运算
    安装语言包-英文(美国)
    selenium page objects
    logging模块
  • 原文地址:https://www.cnblogs.com/pangblog/p/3320307.html
Copyright © 2020-2023  润新知