zoukankan      html  css  js  c++  java
  • bzoj 2326 矩阵快速幂

    思路:矩阵快速幂搞一搞。

    #include<bits/stdc++.h>
    #define LL long long
    #define fi first
    #define se second
    #define mk make_pair
    #define PII pair<int, int>
    #define PLI pair<LL, int>
    #define ull unsigned long long
    using namespace std;
    
    const int N = 3e5 + 7;
    const int inf = 0x3f3f3f3f;
    const LL INF = 0x3f3f3f3f3f3f3f3f;
    const int Mod = 1e9 + 7;
    
    LL n;
    int mod;
    
    struct Matrix {
        int a[3][3];
        Matrix() {
            memset(a, 0, sizeof(a));
        }
        void init() {
            for(int i = 0; i < 3; i++)
                a[i][i] = 1;
        }
        Matrix operator * (const Matrix &B) const {
            Matrix C;
            for(int i = 0; i < 3; i++)
                for(int j = 0; j < 3; j++)
                    for(int k = 0; k < 3; k++)
                        C.a[i][j] = (C.a[i][j] + 1ll * a[i][k] * B.a[k][j]) % mod;
            return C;
        }
        Matrix operator ^ (LL b) {
            Matrix C; C.init();
            Matrix A = (*this);
            while(b) {
                if(b & 1) C = C * A;
                A = A * A; b >>= 1;
            }
            return C;
        }
    } M;
    
    int main() {
        int Mat[3][3] = {
            {1, 1, 0},
            {0, 1, 1},
            {0, 0, 1}
        };
        for(int i = 0; i < 3; i++)
            for(int j = 0; j < 3; j++)
                M.a[i][j] = Mat[i][j];
    
        scanf("%lld%d", &n, &mod);
    
        Matrix A; A.init();
        bool flag = true;
        for(LL i = 1000000000000000000; i; i /= 10) {
            LL p = 0;
            if(n >= i) {
                if(flag) p = n - i + 1;
                else p = i * 10 - i;
                flag = false;
            }
            M.a[0][0] = i % mod * 10 % mod;
            A = A * (M ^ p);
        }
        printf("%d
    ", (A.a[0][1] + A.a[0][2]) % mod);
        return 0;
    }
    
    /*
    */
  • 相关阅读:
    bat 设置 IP, 清除IP
    Java Web 过滤器的典型应用
    Servlet 生命周期
    Java 的四类八种基本类型
    MVC框架实现登陆功能
    Android开发入门(2)创建Android项目
    Android开发入门(1)Android系统简介
    算法导论——排序复习
    eclipse添加maven
    centos编译openjdk
  • 原文地址:https://www.cnblogs.com/CJLHY/p/9720300.html
Copyright © 2011-2022 走看看