Advertisement
Mirbek

ИГРАЛЬНЫЕ КОСТИ 2(Матрица)

Feb 22nd, 2022
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int mod = 1e9 + 7;
  6. const int N = 1e6 + 5;
  7.  
  8. long long n;
  9. vector < vector <int> > Zero, one;
  10.  
  11. vector < vector <int> > mult(vector < vector <int> > a, vector < vector <int> > b) {
  12.     vector < vector <int> > ret = a;
  13.     int n = a.size();
  14.     for (int i = 0; i < n; i++) {
  15.         for (int j = 0; j < n; j++) {
  16.             ret[i][j] = 0;
  17.             for (int k = 0; k < n; k++) {
  18.                 ret[i][j] = (ret[i][j] + a[i][k] *1ll* b[k][j]) % mod;
  19.             }
  20.         }
  21.     }
  22.     return ret;
  23. }
  24.  
  25. vector < vector <int> > binpow(vector < vector <int> > a, long long n) {
  26.     if (n == 0) {
  27.         return Zero;
  28.     }
  29.     if (n % 2 == 1) {
  30.         vector < vector <int> > b = binpow(a, n - 1);
  31.         return mult(b, a);
  32.     } else {
  33.         vector < vector <int> > b = binpow(a, n / 2);
  34.         return mult(b, b);
  35.     }
  36. }
  37.  
  38. int get(int x, long long n) {
  39.     vector < vector <int> > zero, one;
  40.     zero.resize(x);
  41.     one.resize(x);
  42.     for (int i = 0; i < x; i++) {
  43.         zero[i].resize(x);
  44.         one[i].resize(x);
  45.         for (int j = 0; j < x; j++) {
  46.             if (i == j) zero[i][j] = 1;
  47.             if (i - 1 == j || j == x - 1)
  48.                 one[i][j] = 1;
  49.         }
  50.     }
  51.     Zero = zero;
  52.     vector < vector <int> > ans = binpow(one, n);
  53.     return ans[x - 1][x - 1];
  54. }
  55.  
  56. int main(){
  57.  
  58.     cin >> n;
  59.     int ans = (get(6, n) - get(5, n)) % mod;
  60.     ans = (ans + mod) % mod;
  61.     cout << ans << endl;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement