zoukankan      html  css  js  c++  java
  • 【递归】普通递归关系 矩阵快速幂

    问题 B: 【递归】普通递归关系

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 12  解决: 12
    [提交][状态][讨论版]

    题目描述

    考虑以下定义在非负整数n上的递归关系:




    其中ab是满足以下两个条件的常数:




    给定f0, f1, a, bn,请你写一个程序计算F(n),可以假定F(n)是绝对值不超过109的整数(四舍五入)

    输入

    输入文件一行依次给出5个数,f0 ,f1,a,b和n,f0,f1是绝对值不超过109 ,n是非负整数,不超过109。另外,a、b是满足上述条件的实数,且|a|,|b|≤106

    输出

    一行,F(n)的值

    样例输入

    0 1 1 1 20
    

    样例输出

    6765
    #include <bits/stdc++.h>
    using namespace std;
     
    typedef vector <int> vec;
    typedef vector <vec> mat;
    typedef long long ll;
     
    const int M = 10000;
     
    mat mul(mat &A, mat &B){
     
        mat C(A.size(), vec(B[0].size()));
        for (int i = 0; i < A.size(); i++){
            for (int k = 0; k < B.size(); k++){
                for (int j = 0; j < B[0].size(); j++){
                    C[i][j] = (C[i][j]+A[i][k]*B[k][j]) % M;
                }
            }
        }
        return C;
    }
     
    mat pow(mat A, ll n){
     
        mat B(A.size(), vec(A.size()));
        for (int i = 0; i < A.size(); i++){
            B[i][i] = 1;
        }
        while (n > 0){
     
            if (n & 1) B = mul(B, A);
            A = mul(A, A);
            n >>= 1;
        }
        return B;
    }
    ll  n,a,b,c,d;
    void slove(){
        mat A(2, vec(2));
        A[0][0] = a; A[0][1] = b;
        A[1][0] = c; A[1][1] = d;
        A = pow(A, n);
        printf("%d
    ",A[1][0]);
    }
    int main() {
        cin>>a>>b>>c>>d>>n;
        slove();
        return 0;
    }
    View Code
  • 相关阅读:
    高版本Visual Studio和低版本ArcGIS共存 工具箱没有控件的解决方法
    Geodesic 什么是“测地线的”?
    向QGIS项目组提交了一份建议
    QGIS 3.4 3.6 另存栅格图层到GeoPackage出现覆盖问题 解决方案
    Dijkstra.NET 库体验报告
    QGIS练手
    GeoPackage
    QGIS练手
    postgresql 修改字段名称
    django signal
  • 原文地址:https://www.cnblogs.com/cshg/p/5641811.html
Copyright © 2011-2022 走看看