我的情况好像和你的一样,也是刚开始20pts,a1和a2换一下就40pts了,过的点和你的都一样
by lkxsg123 @ 2023-07-26 21:29:20
我的最后sum[1][2]改成sum[2][1]就过了
by lkxsg123 @ 2023-07-26 21:31:02
```cpp
#include<bits/stdc++.h>
using namespace std;
long long n,k1[3][3]={0,0,0,0,1,1,0,1,0},sum[3][3]={0,0,0,0,1,0,0,0,1},m,p,q,a11,a22,MOD;
int cf(){
long long nm[3][3];
for(int i=1;i<=2;i++){
for(int j=1;j<=2;j++){
nm[i][j]=0;
for(int k=1;k<=2;k++){
nm[i][j]=(nm[i][j]+sum[i][k]*k1[k][j]%MOD)%MOD;
}
}
}
for(int i=1;i<=2;i++){
for(int j=1;j<=2;j++){
sum[i][j]=nm[i][j];
}
}return 0;
}
int cf2(){
long long nm[3][3];
for(int i=1;i<=2;i++){
for(int j=1;j<=2;j++){
nm[i][j]=0;
for(int k=1;k<=2;k++){
nm[i][j]=(nm[i][j]+k1[i][k]*k1[k][j]%MOD)%MOD;
}
}
}
for(int i=1;i<=2;i++){
for(int j=1;j<=2;j++){
k1[i][j]=nm[i][j];
}
}return 0;
}
int main(){
cin>>p>>q>>a11>>a22>>n>>MOD;
k1[1][1]=p;
k1[2][1]=q;
if(n>2){
n-=2;
while(n){
if(n&1)cf();
cf2();
n>>=1;
}
cout<<(a22*sum[1][1]+a11*sum[2][1])%MOD;
}
else if(n==1)cout<<a11;else cout<<a22;;
}
```
by lkxsg123 @ 2023-07-26 21:31:39
@[lkxsg123](/user/944410) 输出那里
by lkxsg123 @ 2023-07-26 21:32:23
@[Maysoul](/user/409774) 你推错式子了,你的`ans` 矩阵是 $1\times 2$ 的,那么你的 `date`矩阵应该是 $\begin{bmatrix}
p &1 \\
q&0
\end{bmatrix}$,而不是 $\begin{bmatrix}
p &q \\
1&0
\end{bmatrix}$,你可以演算一下。
改了就过了。
by bzzltl @ 2023-08-16 10:32:19