Advertisement
Mirbek

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

Feb 22nd, 2022
694
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 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 main(){
  39.     zero.resize(6);
  40.     one.resize(6);
  41.     one.resize(6);
  42.     for (int i = 0; i < 6; i++) {
  43.         zero[i].resize(6);
  44.         one[i].resize(6);
  45.         for (int j = 0; j < 6; j++) {
  46.             if (i == j)
  47.                 zero[i][j] = 1;
  48.             if (i - 1 == j || j == 5) {
  49.                 one[i][j] = 1;
  50.             }
  51.         }
  52.     }
  53.  
  54.     cin >> n;
  55.     vector < vector <int> > ans = binpow(one, n);
  56.     cout << ans[5][5] << endl;
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement