zoukankan      html  css  js  c++  java
  • 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;
        }
    }


  • 相关阅读:
    CentOS 7拨号上网(ADSL & PPPoE)
    linux使用nmcli重新生成网卡配置文件
    Linux 内存缓存占用过大,Centos7设置定时清除buff/cache的脚本
    部署redis6.0 常见问题
    ssh 升级导致的hadoop 主备切换失败
    配置zookeeper的 ACL权限
    sqoop 创建跟mysql相同表结构的hive表报错
    vim中显示不可见字符
    supervisor 使用
    使用hive streaming 统计Wordcount
  • 原文地址:https://www.cnblogs.com/pangblog/p/3320307.html
Copyright © 2011-2022 走看看