嘤嘤嘤寄了求查错
查看原帖
嘤嘤嘤寄了求查错
93701
Morgen_Kornblume楼主2022/3/28 23:34

RT

我模也模了,输出格式也注意力,怎么还是寄了呢?跪求大佬查错,加关注。

#define ll long long
#include<bits/stdc++.h>
using namespace std;

namespace Morgen{
	const int maxn=50;const char ze='0';
	const int mod=10;
	inline int fr(){
		int res=0;char tp=getchar();
		while(!isdigit(tp))tp=getchar();
		while(isdigit(tp)){
			res=(res<<1)+(res<<3)+tp-ze;
			tp=getchar();
		}
		return res;
	}

	struct martix{
		int siz;
		int dat[maxn][maxn];

		void init(int x){
			siz=x;
			memset(dat,0,sizeof(dat));
			for(int i=1;i<=x;i++)dat[i][i]=1;
		}

		friend martix operator *(martix tp1,martix tp2){
			martix res;res.siz=tp1.siz;
			for(int i=1;i<=tp1.siz;i++)
				for(int j=1;j<=tp1.siz;j++)
					for(int k=1;k<=tp1.siz;k++){
						res.dat[i][j]+=tp1.dat[i][k]*tp2.dat[k][j];
						res.dat[i][j]%=mod;
					}
			return res;
		}

		friend martix operator +(martix tp1,martix tp2){
			martix res;res.siz=tp2.siz;
			for(int i=1;i<=tp1.siz;i++){
				for(int j=1;j<=tp2.siz;j++){
					res.dat[i][j]=(tp1.dat[i][j]+tp2.dat[i][j])%mod;
				}
			}
			return res;
		}
	}mar,ans,unit;

	int n,k;

	martix ksm(int pow){
		martix res=unit;
		martix tmp=mar;
		while(pow){
			if(pow&1)res=res*tmp;
			tmp=tmp*tmp;
			pow>>=1;
		}
		return res;
	}

	martix divc(int pow){
		if(pow==1)return mar;
		if(pow%2==0){
			martix res=divc(pow/2);
			return res+res*ksm(pow/2);
		}
		else{
			return divc(pow-1)+ksm(pow);
		}
	}

	bool main(){
		n=fr();k=fr();
		unit.init(n);
		if(!n)return false;
		

		mar.siz=n;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				mar.dat[i][j]=fr()%mod;
		
		ans=divc(k);

		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				printf("%d",ans.dat[i][j]);
				if(j!=n)printf(" ");
			}
			printf("\n");
		}
		printf("\n");
			

		return true;
	}
};

int main(){
	while(1)
	if(!Morgen::main())break;
	return 0;
}
2022/3/28 23:34
加载中...