求助,看过了帖子,初始化和数据类型都对的,为什么还是只有十分?

P3390 【模板】矩阵快速幂

@[shaozi](/user/1194434) 放个代码。
by xiaoshumiao @ 2024-01-26 12:15:09


@[xiaoshumiao](/user/1008513) 记录翻一下,似乎有源代码。。。 ```cpp #include<bits/stdc++.h> using namespace std; //#define int long long const long long N = 105 ; const long long mod = 1e9+7 ; long long n,k; struct mat{ long long a[N][N]; }A,I; inline mat operator*(const mat &x,const mat &y){ mat res; for(long long i=1; i<=n; i++) for(long long j=1; j<=n; j++) res.a[i][j]=0; for(long long i=1; i<=n; i++) for(long long j=1; j<=n; j++) for(long long k=1; k<=n; k++) res.a[i][j] += (x.a[i][k]*y.a[k][j]%mod)%mod; return res; } signed main(){ cin>>n>>k; for(long long i=1; i<=n; i++) for(long long j=1; j<=n; j++) cin>>A.a[i][j]; for(long long i=1; i<=n; i++) I.a[i][i]=1;//¶¨Ò嵥λ¾ØÕó while(k){ if(k&1) I=I*A; A=A*A; k/=2; } for(long long i=1; i<=n; i++){ for(long long j=1; j<=n; j++){ cout<<I.a[i][j]<<' '; } cout<<endl; } return 0; } ```
by 2021zjhs005 @ 2024-01-26 12:32:32


@[shaozi](/user/1194434) 乘的时候没清空。
by xiaoshumiao @ 2024-01-26 12:33:29


@[shaozi](/user/1194434) ```cpp res.a[i][j] += (x.a[i][k]*y.a[k][j]%mod)%mod; ``` 这句话只对 `x.a[i][k]*y.a[k][j]` 进行了取模,这是 `+=` 的原因,应该把它展开一下就行了。
by 2021zjhs005 @ 2024-01-26 12:36:12


@[2021zjhs005](/user/1121995) 非常感谢大佬!!!
by shaozi @ 2024-01-28 14:16:06


@[2021zjhs005](/user/1121995) @[xiaoshumiao](/user/1008513) 不用清空也可以,是我取模不完整。 谢谢大佬~
by shaozi @ 2024-01-28 14:18:16


|