求助,为什么提交后一直显示格式错误?
查看原帖
求助,为什么提交后一直显示格式错误?
353967
baoyangawa楼主2023/8/15 17:18

如题

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
const int MAXN=50;
ll n,k;
struct node{
	ll k[MAXN][MAXN];
	node(){
		memset(k,0,sizeof k);
	}
	void danwei(){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				k[i][j]=0;
				if(i==j) k[i][j]=1;
			}
		}
	}
}A,O;
node mo(node a){
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			a.k[i][j]%=10;
		}
	}return a;
}
node operator *(node a,node b){
	node ans;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			for(int l=0;l<n;l++){
				ans.k[i][j]+=a.k[i][l]*b.k[l][j];
			}
		}
	}return mo(ans);
}
node operator +(node a,node b){
	node ans;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			ans.k[i][j]=a.k[i][j]+b.k[i][j];
		}
	}return mo(ans);
}
node qpow(node aa,ll b){//A^b %P
	node ans;
	ans.danwei();
	while(b){ 
		if(b&1)
			ans=mo(ans*aa);
		aa=mo(aa*aa);
		b>>=1;
	}
	return mo(ans);
}
node work(ll n){
	if(n==0) return O;
	if(n==1) return A;
	if(n%2==0){
		return work(n/2) * (qpow(A,n/2) + O);
	}else{
		node tmp=work(n-1);
		node tmp2=qpow(A,n);
		return tmp+tmp2;
	}
}
int main(){
	while(cin>>n>>k){
		if(n==k&&n==0) break;
		O.danwei();
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				long long x;
				scanf("%lld",&x);
				A.k[i][j]=x%10ll;
			}
		}
		node ans=mo(work(k));
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				printf("%d",ans.k[i][j]%10);
				if(j!=n-1) printf(" ");
			}
			printf("\n");
		}
		printf("\n");
	}
	return 0;
}
2023/8/15 17:18
加载中...