1 solutions
-
0
#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