File tree 1 file changed +67
-0
lines changed
1 file changed +67
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+ using namespace std ;
3
+
4
+ #define mod 98765431
5
+ int size=2 ;
6
+ void multiply (long long int first[][3 ],long long int second[][3 ])
7
+ {
8
+ long long int answer[10 ][10 ]={};
9
+ for (int i=0 ;i<size;i++){
10
+ for (int j=0 ;j<size;j++){
11
+ for (int k=0 ;k<size;k++){
12
+ answer[i][j]=answer[i][j] + (first[i][k]%mod * second[k][j]%mod)%mod;
13
+ answer[i][j]%=mod;
14
+ }
15
+ }
16
+ }
17
+ for (int i=0 ;i<size;i++){
18
+ for (int j=0 ;j<size;j++){
19
+ first[i][j]=answer[i][j];
20
+ }
21
+ }
22
+ }
23
+
24
+ void power (long long int second[][3 ],long long int n){
25
+ long long int current[3 ][3 ]={},i,j;
26
+ for (i=0 ;i<size;i++){
27
+ for (j=0 ;j<size;j++)
28
+ current[i][j]=second[i][j];
29
+ }
30
+ if (n<=1 ){
31
+ return ;
32
+ }
33
+ if (n&1 ){
34
+ power (second,n-1 );
35
+ multiply (second ,current);
36
+ }
37
+ else {
38
+ power (second,n/2 );
39
+ multiply (second,second);
40
+ }
41
+ }
42
+ int main (){
43
+ int n,i;
44
+ long long int t;
45
+ long long int cows[50010 ],initial_sum=0 ;
46
+ cin>>n>>t;
47
+ for (int i=0 ;i<n;i++){
48
+ cin>>cows[i];
49
+ cows[i]%=mod;
50
+ initial_sum+=cows[i];
51
+ initial_sum%=mod;
52
+ }
53
+ long long int ans=0 ,myArray[3 ][3 ],newAnswer=0 ;
54
+ myArray[0 ][0 ]=n-1 ;myArray[0 ][1 ]=0 ;myArray[1 ][0 ]=1 ;myArray[1 ][1 ]=-1 ;
55
+ power (myArray,t);
56
+ // for(int i=0;i<size;i++){
57
+ // for(int j=0;j<size;j++)
58
+ // cout<<myArray[i][j]<<" ";
59
+ // cout<<"\n";
60
+ // }
61
+ for (i=0 ;i<n;i++){
62
+ newAnswer=(myArray[1 ][0 ]%mod*initial_sum%mod)%mod + (myArray[1 ][1 ]%mod*cows[i]%mod)%mod;
63
+ newAnswer=(newAnswer+mod)%mod;
64
+ cout<<newAnswer<<" \n " ;
65
+ }
66
+ return 0 ;
67
+ }
You can’t perform that action at this time.
0 commit comments