Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF 2147483647
- #define mp make_pair
- #define pb push_back
- #define int long long
- #define pii pair<int,int>
- #define mod (1000000007)
- using namespace std;
- struct matrix{
- int v[2][2];
- void operator= (matrix a){
- for(int i=0;i<2;i++)
- for(int j=0;j<2;j++)
- v[i][j]=a.v[i][j];
- }
- matrix operator* (matrix a){
- matrix ans;
- for(int i=0;i<2;i++)
- for(int j=0;j<2;j++){
- ans.v[i][j]=0;
- for(int k=0;k<2;k++)
- ans.v[i][j]+=(v[i][k]*a.v[k][j])%mod;
- ans.v[i][j]%=mod;
- }
- return ans;
- }
- matrix(){
- for(int i=0;i<2;i++)
- for(int j=0;j<2;j++)
- v[i][j]=((i==j)?1:0);
- }
- };
- matrix power(matrix a,int p){
- matrix e=a;
- matrix ans;
- do{
- if(p&1) ans=ans*e;
- }while(e=e*e,p>>=1);
- return ans;
- }
- signed main()
- {
- int x1,x2,a,b,n;
- cin >> x1 >> x2 >> a >> b >> n;
- matrix w;
- w.v[0][0]=0;
- w.v[1][0]=1;
- w.v[0][1]=a;
- w.v[1][1]=b;
- matrix ans=power(w,n-1);
- cout << ((ans.v[1][0]*x2)%mod + (ans.v[0][0]*x1)%mod)%mod << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement