本地测不过,交上去对了?
查看原帖
本地测不过,交上去对了?
142327
C6H2CH3_NO2_3楼主2024/10/16 19:53
#include<bits/stdc++.h>
#define ll long long
#define maxn 105
#define M 1000000007
using namespace std;
ll input(){
	ll ans=0;
	char c=getchar();
	bool flag=0;
	while(c<'0'||c>'9'){
		if(c=='-')flag=1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		ans=ans*10+c-'0';
		c=getchar();
	}
	if(flag)ans=-ans;
	return ans;
}
void print(ll ans,char c=0,bool flag=1){
    if(ans<0){
        putchar('-');
        ans=-ans;
    }
    if(ans>=10)print(ans/10,c,0);
    putchar('0'+ans%10);
    if(flag&&c!=0)putchar(c);
}
ll n,k;
class Matrix{
	public:
	ll v[maxn][maxn];
	Matrix(){
		memset(v,0,sizeof(v));
	}
	Matrix operator *(Matrix A){
		Matrix ans;
		for(ll i=1;i<=n;i++){
			for(ll j=1;j<=n;j++){
				for(ll k=1;k<=n;k++){
					ans.v[i][j]+=((v[i][k]*A.v[k][j])%M);
					ans.v[i][j]%=M;
			//		cout<<"v["<<i<<"]["<<j<<"]="<<ans.v[i][j]<<endl;
				}
			}
		}
		return ans;
	}
}m,ANS;

void Set(Matrix &ma){
	for(ll i=1;i<=n;i++)ma.v[i][i]=1;
}
Matrix quickPower(Matrix d,ll z){
    Matrix ans,k;
    Set(ans);
	if(!z)return ans;
//	cout<<z<<endl;	 
	k=quickPower(d,z/2);
//	cout<<z<<endl;
	if(z&1)ans=k*k*d;
	else ans=k*k;
	return ans;
}

int main(){
    n=input();k=input();
    for(ll i=1;i<=n;i++){
    	for(ll j=1;j<=n;j++){
    		m.v[i][j]=input();
		}
	}
	ANS=quickPower(m,k);
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=n;j++)print(ANS.v[i][j],' ');
		putchar('\n');
	}
    return 0;
}

本地测
3 100
1 0 1
0 1 0
1 0 1
过不了交上去AC了什么玩意?离大谱。

2024/10/16 19:53
加载中...