zoukankan      html  css  js  c++  java
  • Hdu 1757A Simple Math Problem矩阵

    构造个矩阵搞下就行了

    a0 a1 a2 a3 a4 a5 a6 a7 a8 a9

    1  0   0   0  0   0   0  0   0  0   

    0  1   0   0  0   0   0  0   0  0    

    0  0   1   0  0   0   0  0   0  0

    0  0   0   1  0   0   0  0   0  0

    0  0   0   0  1   0   0  0   0  0   

    0  0   0   0  0   1   0  0   0  0

    0  0   0   0  0   0   1  0   0  0

    0  0   0   0  0   0   0  1   0  0

    0  0   0   0  0   0   0  0   1  0

    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <string.h>
    typedef long long LL;
    using namespace std;
    LL  vis[100];
    LL  M;
    struct Matrix
    {
        LL  m[12][12];
    };
    LL  n;
    Matrix Mul(Matrix a, Matrix b)
    {
        Matrix ans;
        for (LL i = 0; i < 10; i++){
            for (LL j = 0; j < 10; j++){
                ans.m[i][j] = 0;
                for (LL k = 0; k < 10; k++){
                    ans.m[i][j] += a.m[i][k] * b.m[k][j];
                    ans.m[i][j] %= M;
                }
            }
        }
        return ans;
    }
    
    Matrix quick(Matrix a, LL b)
    {
        Matrix ans;
        for (LL i = 0; i < 10; i++)
        for (LL j = 0; j < 10; 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 init()
    {
        for (LL i = 0; i < 10; i++)
            scanf("%d", &vis[i]);
        Matrix ans;
        for (LL i = 0; i < 10; i++)
        for (LL j = 0; j < 10; j++)
            ans.m[i][j] = 0;
        for (LL i = 0; i < 10; i++)
            ans.m[0][i] = vis[i];
        for (LL i = 1; i < 10; i++){
            ans.m[i][i - 1] = 1;
        }
        return ans;
    }
    
    void gao()
    {
        LL t = n - 9;
        Matrix ans = init();
        ans = quick(ans, t);
        LL sum = 0;
        for (LL i = 0; i < 10; i++){
            sum += ans.m[0][i] * (9 - i);
            sum %= M;
        }
        cout << sum << endl;
    }
    
    int main()
    {
        while (cin >> n >> M){
            if (n < 10){
                cout << n << endl;
                continue;
            }
            gao();
        }
        return 0;
    }
  • 相关阅读:
    logistics regression
    dir 以及 attrib
    python 爬取有道翻译
    spss 逐步回归
    JQuery传值给.ashx乱码
    字符串转换成json的三种方式
    启动数据库SQL Server Service Broker
    ASP.NET两种缓存方式
    VS安装控件后报错
    sql server中有不是全数字的字符串
  • 原文地址:https://www.cnblogs.com/yigexigua/p/4058070.html
Copyright © 2011-2022 走看看