1 0 1 2 0 1 2 3 4 5 6 7
0 0 1 2 1
直接矩阵乘 O(n^3) 800^3=5120,0000 TLE
所以利用mod3的性质 稍加优化
#include<bits/stdc++.h> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define ForD(i,n) for(int i=n;i;i--) #define ForkD(i,k,n) for(int i=n;i>=k;i--) #define RepD(i,n) for(int i=n;i>=0;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1) #define Rson ((o<<1)+1) #define MEM(a) memset(a,0,sizeof(a)); #define MEMI(a) memset(a,127,sizeof(a)); #define MEMi(a) memset(a,128,sizeof(a)); #define INF (2139062143)| #define MAXN (800+10) #define F (3) #define pb push_back #define mp make_pair typedef long long ll; ll mul(ll a,ll b){return (a*b)%F;} ll add(ll a,ll b){return (a+b)%F;} ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;} void upd(ll &a,ll b){a=(a%F+b%F)%F;} int n,a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN]; int main() { // freopen("j.in","r",stdin); while(cin>>n) { For(i,n) For(j,n) scanf("%d",&a[i][j]),a[i][j]%=3; For(i,n) For(j,n) scanf("%d",&b[i][j]),b[i][j]%=3,c[i][j]=0; For(i,n) For(k,n) if (a[i][k]) For(j,n) c[i][j]=(c[i][j]+a[i][k]*b[k][j])%3; For(i,n) { For(j,n-1) printf("%d ",c[i][j]); printf("%d\n",c[i][n]); } } return 0; }