Guest User

Untitled

a guest
Jun 19th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.40 KB | None | 0 0
  1. /*
  2.  
  3.     Author :- maxwell_008(Swapnil Gharat)
  4.  
  5. */
  6. #include <bits/stdc++.h>
  7. using namespace std;
  8. #define INF 4e18
  9. #define N 100005
  10. #define FOR(n) for(ll i=0;i<n;++i)
  11. #define FORD(i,a,b) for(ll i=a;i>=b;--i)
  12. #define pb push_back
  13. #define mp make_pair
  14. #define all(x) x.begin(),x.end()
  15. #define ll long long int
  16. #define s(x) scanf("%d", &x)
  17. #define sd(x) scanf("%lf", &x)
  18. #define sl(x) scanf("%lld", &x)
  19. #define mod 1000000007
  20. #define fi first
  21. #define se second
  22. #define p(x) printf("%d",x)
  23. #define pl(x) printf("%lld", x)
  24. #define pd(x) printf("%lf", x)
  25. #define pn() printf("\n")
  26. #define vi(v) vector<int>v
  27. #define vl(v) vector<long long int>v
  28. #define pii pair<int,int>
  29. #define pll pair<long long int,long long int>
  30. #define len(s) s.lenGth()
  31. #define start_code ios_base::sync_with_stdio(0)
  32. void input(ll n,ll a[]){FOR(n) scanf("%lld", &a[i]);}
  33. ll bin_expo(ll A, ll B, ll M){ll res = 1LL;while (B > 0){if(B % 2 == 1){res = (res * A) % M;}A = (A * A) % M; B = B / 2;}return res;}
  34. #define LOGN 20
  35. bool isPrime[N+1];
  36. void sieve() {
  37.     ll i, j;
  38.  
  39.     memset(isPrime, true, sizeof(isPrime));
  40.  
  41.     for(i = 2; i*i <= N; i++) {
  42.         if(isPrime[i] == true) {
  43.             for(j = i*i; j <= N; j = j+i)
  44.                 isPrime[j] = false;
  45.         }
  46.     }
  47. }
  48. ll gcd(ll a, ll b)
  49. {
  50.     if( b == 0)
  51.         return a;
  52.     return gcd(b,a%b);
  53. }
  54.  
  55. ll lcm(ll a, ll b)
  56. {
  57.     return (a*b)/gcd(a, b);
  58. }
  59. ll mat[7][7] =      {
  60.                          {1LL,1LL,1LL,1LL,0LL,0LL,1LL},
  61.                          {0LL,1LL,1LL,1LL,0LL,0LL,1LL},
  62.                          {0LL,0LL,1LL,1LL,0LL,0LL,1LL},
  63.                          {0LL,0LL,0LL,1LL,0LL,0LL,1LL},
  64.                          {0LL,0LL,0LL,0LL,0LL,0LL,-1LL},
  65.                          {0LL,0LL,0LL,0LL,1LL,0LL,-1LL},
  66.                          {0LL,0LL,0LL,0LL,0LL,1LL,-1LL}
  67.                     };
  68. ll init[7]={6LL,8LL,10LL,12LL,-1LL,-1LL,-1LL};
  69. ll a,b,c,p,q,r,k,tmp[7][7];
  70. ll result[7][7];
  71. void matmul(ll a[][7],ll b[][7],ll ans[][7])
  72. {
  73.     for(int i=0;i<7;i++)
  74.     {
  75.         for(int j=0;j<7;j++)
  76.         {
  77.             ans[i][j] = 0;
  78.             for(int k=0;k<7;k++)
  79.             {
  80.                 ans[i][j] = ((ans[i][j]%mod) + ((a[i][k]%mod)*(b[k][j]%mod))%mod)%mod;
  81.             }
  82.             ans[i][j]%=mod;
  83.         }
  84.     }
  85. }
  86.  
  87. void solve()
  88. {
  89.     for(int i = 0; i < 7; i++)
  90.         for(int j = 0; j < 7; j++)
  91.             if(i == j)
  92.                 result[i][j] = 1;
  93.             else
  94.                 result[i][j] = 0;
  95.     ll n = k-2;
  96.     while(n>0)
  97.     {
  98.             if( n & 1)
  99.             {
  100.                 matmul(result,mat,tmp);
  101.                 for(int i=0;i<7;i++)
  102.                 {
  103.                     for(int j=0;j<7;j++)
  104.                     {
  105.                         result[i][j] = tmp[i][j];
  106.                     }
  107.                 }
  108.             }
  109.             matmul(mat,mat,tmp);
  110.             for(int i=0;i<7;i++)
  111.             {
  112.                 for(int j=0;j<7;j++)
  113.                 {
  114.                     mat[i][j] = tmp[i][j];
  115.                 }
  116.             }
  117.             n/=2;
  118.     }
  119.      ll fin_ans=0;
  120.     for(int i=0;i<7;i++)
  121.     {
  122.         fin_ans = ((fin_ans%mod) +  ((init[i]%mod) * (result[i][6]%mod))%mod)%mod;
  123.     }
  124.     cout<<fin_ans<<endl;
  125. }
  126. int main()
  127. {
  128.     cin>>a>>b>>c>>p>>q>>r>>k;
  129.     mat[4][6]=c;
  130.     mat[5][6]=b;
  131.     mat[6][6]=a;
  132.     init[4] = p;
  133.     init[5] = q;
  134.     init[6] = r;
  135.     solve();
  136.     return 0;
  137. }
Add Comment
Please, Sign In to add comment