1 solutions

  • 0
    @ 2024-6-14 16:03:14
    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <ctime>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <map>
    #include <set>
    #define LL long long
    const int N = 1e5 + 5;
    const int INF = 0x3f3f3f3f;
    const int mod = 1e9 + 7;
    using namespace std;
    struct Matrix{
        int r, c;
        vector< vector<int> > a;
        Matrix(int n, int m): r(n), c(m), a(vector< vector<int> > (n, vector<int>(m))) {}
        vector<int>& operator[](int i){
            return a[i];
        }
        const vector<int>& operator[](int i) const {
            return a[i];
        }
        Matrix operator*(const Matrix &m) const{
            Matrix ret(r, m.c);
            for (int i = 0; i < r; i++)
                for (int j = 0; j < m.c; j++)
                    for (int k = 0; k < c; k++)
                        ret[i][j] = (ret[i][j] + (LL)a[i][k] * m[k][j]) % mod;
            return ret;
        }
        Matrix pow(LL b) const{
            Matrix A = *this, ret(r, r);
            for (int i = 0; i < r; i++)
                ret[i][i] = 1;
            for (; b; A = A * A, b >>= 1)
                if (b & 1)
                    ret = ret * A;
            return ret;
        }
    };
    int main(){
        int k;
        cin >> k;
        Matrix A(2, 2);
       A[0][0] = A[0][1] = A[1][0] = 1;
        A = A.pow(k);
        cout << A[0][1];
        return 0;
    }
    
  • 1

Information

ID
1700
Time
1000ms
Memory
256MiB
Difficulty
4
Tags
# Submissions
22
Accepted
11
Uploaded By