zoukankan      html  css  js  c++  java
  • Hdu3233Matrix Power Series矩阵

    前面就做过了。。。二分搞下

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <string.h>
    typedef long long LL;
    using namespace std;
    int n, M;
    struct Matrix
    {
        int m[40][40];
    };
    
    Matrix Mul(Matrix a, Matrix b)
    {
        Matrix ans;
        for (int i = 0; i < n;i++)
        for (int j = 0; j < n; j++){
            ans.m[i][j] = 0;
            for (int k = 0; k < n; k++){
                ans.m[i][j] += a.m[i][k] * b.m[k][j];
                ans.m[i][j] %= M;
            }
        }
        return ans;
    }
    
    Matrix quick(Matrix a, int b)
    {
        Matrix ans;
        for (int i = 0; i < n;i++)
        for (int j = 0; j < n; j++)
            ans.m[i][j] = (i == j);
        while (b){
            if (b & 1) ans = Mul(ans, a);
            a = Mul(a, a);
            b >>= 1;
        }
        return ans;
    }
    
    Matrix add(Matrix a, Matrix b)
    {
        for (int i = 0; i < n;i++)
        for (int j = 0; j < n; j++)
            a.m[i][j] += b.m[i][j], a.m[i][j] %= M;
        return a;
    }
    
    Matrix gao(Matrix a, int len)
    {
        if (len == 1) return a;
        Matrix ans;
        for (int i = 0; i < n;i++)
        for (int j = 0; j < n; j++) ans.m[i][j] = 0;
        Matrix t = gao(a, len >> 1);
        ans = add(ans, t);
        ans = add(ans, Mul(t, quick(a, (len >> 1))));
        if (len & 1) return add(ans, quick(a, len));
        else return ans;
    }
    
    int main()
    {
        int k;
        while (cin >> n >> k >> M){
            Matrix ans;
            for (int i = 0; i < n;i++)
            for (int j = 0; j < n; j++)
                scanf("%d", &ans.m[i][j]);
            Matrix sum = gao(ans, k);
            for (int i = 0; i < n; i++){
                for (int j = 0; j < n; j++)
                    cout << sum.m[i][j] << " ";
                cout << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    Python 7步机器学习
    STL容器-- map and multimap 用法
    STL容器-- forward_list 用法
    STL容器-- fixed-size array 用法
    STL容器-- deque 用法
    网站502与504错误分析
    git将一个分支的某个文件合并到当前分支
    阿里云RDS上用mysqldump导入导出
    mysqldump具体应用实例
    mysql的导入导出工具mysqldump命令详解
  • 原文地址:https://www.cnblogs.com/yigexigua/p/4058190.html
Copyright © 2011-2022 走看看