Advertisement
double_trouble

Untitled

Apr 14th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <vector>
  4. #include <string>
  5. #include <cstring>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <set>
  9. #include <queue>
  10. #include <map>
  11.  
  12. using namespace std;
  13.  
  14. const long long inf = 2000000007;
  15.  
  16. vector<vector<long long> > vec;
  17. vector<vector<long long> > matr, a;
  18.  
  19. long long mod;
  20.  
  21. vector<vector<long long> > operator*(const vector<vector<long long> > &x, const vector< vector<long long> > &y)
  22. {
  23.     vector<vector<long long> > rez;
  24.     long long n = x.size();
  25.     long long m = y[0].size();
  26.     long long l = y.size();
  27.     rez.resize(n);
  28.     for (long long i = 0; i < n; i++)
  29.         rez[i].resize(m);
  30.     for (long long i = 0; i < n; i++)
  31.         for (long long j = 0; j < m; j++)
  32.         {
  33.             for (long long k = 0; k < l; k++)
  34.                 rez[i][j] += (x[i][k] * y[k][j]) % mod;
  35.             rez[i][j] %= mod;
  36.         }
  37.  
  38.     return rez;
  39. }
  40.  
  41. vector<vector<long long> > mypow(const vector<vector<long long> > &x, long long k)
  42. {
  43.     if (k == 0)
  44.     {
  45.         vector<vector<long long> > s;
  46.         s.resize(a.size());
  47.         for (long long i = 0; i < a.size(); i++)
  48.         {
  49.             s[i].resize(a[i].size());
  50.             s[i][i] = 1;
  51.         }
  52.  
  53.         return s;
  54.     }
  55.  
  56.     if (k == 1)
  57.         return x;
  58.     if (k % 2 == 0)
  59.         return mypow(x * x, k / 2);
  60.     else
  61.         return mypow(x, k - 1) * x;
  62. }
  63.  
  64. int main()
  65. {
  66.     ios_base::sync_with_stdio(0);
  67.     cin.tie(0);
  68.     cout.tie(0);
  69.  
  70.     //freopen("important.in", "r", stdin);freopen("important.out", "w", stdout);
  71.  
  72.     long long n  = 5;
  73.    
  74.     vec.resize(n);
  75.     matr.resize(n);
  76.  
  77.     long long x;
  78.     for (long long i = 0; i < n; i++)
  79.     {
  80.         cin >> x;
  81.         vec[i].push_back(x);
  82.         matr[i].resize(n);
  83.     }
  84.  
  85.     for (long long i = 0; i < n - 1; i++)
  86.         matr[i][i + 1] = 1;
  87.  
  88.     for (long long i = 0; i < n; i++)
  89.     {
  90.         cin >> x;
  91.         matr[n - 1][i] = x;
  92.     }
  93.     long long m;
  94.     cin >> m >> mod;
  95.  
  96.     for (long long i = 0; i < m; i++)
  97.     {
  98.         cin >> x;
  99.         if (x < 6)
  100.         {
  101.             cout << vec[x - 1][0] << " ";
  102.             continue;
  103.         }
  104.         a = mypow(matr, x - 1) * vec;
  105.         cout << a[0][0] % mod << " ";
  106.     }
  107.  
  108. //  system("PAUSE");
  109.  
  110.     return 0;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement