矩阵RE,可以看一下吗?谢谢。
查看原帖
矩阵RE,可以看一下吗?谢谢。
1266584
companions楼主2024/4/4 11:06
#include<bits/stdc++.h>
using namespace std;
long long kj(long long z);
long long gk(long long  x);
long long gj1();
long long gj2();
long long c[20][20],A[20],m,n,c1[20][20],c2[20][20],s;
int k,p;
int main() {
	int j,a,b,i;
	cin>>k;
	for(i=1; i<=k; i++) {
		cin>>A[i];
		A[k+1]+=A[i];
	}
	a=1;
	b=1;
	while(1) {
		if(b<k) {
			c[a++][++b]=1;
		} else {
			if(b-k<k) {
				cin>>c[a][k-((++b)-k)+1];
				c[a+1][k-(b-k)+1]=c[a][k-(b-k)+1];
			} else {
				break;
			}
		}
	}
	c[k+1][k+1]=1;
	cin>>m>>n;
	s=(kj(n)-kj(m))%p;
	cout<<s;
	return 0;
}
long long gj1() {
	int i,j,z;
	for(i=1; i<=k+1; i++) {
		for(j=1; j<=k+1; j++) {
			for(z=1; z<=k+1; z++) {
				c1[i][j]=(c1[i][j]+(c2[z][j]%p)*(c[i][z]%p))%p;
			}
		}
	}
	for(i=1; i<=k+1; i++) {
		for(j=1; j<=k+1; j++) {
			c2[i][j]=c1[i][j];
		}
	}
}
long long gj2() {
	int i,j,z;
	for(i=1; i<=k+1; i++) {
		for(j=1; j<=k+1; j++) {
			for(z=1; z<=k+1; z++) {
				c1[i][j]=(c1[i][j]+(c[z][j]%p)*(c[i][z]%p))%p;
			}
		}
	}
	for(i=1; i<=k+1; i++) {
		for(j=1; j<=k+1; j++) {
			c[i][j]=c1[i][j];
		}
	}
}
long long gk(long long x) {
	int i,j;
	for(i=1; i<=k+1; i++) {
		c2[i][i]=1;
	}
	while(x!=0) {
		if(x&1) {
			gj1();//c2*c
		}
		gj2();//c*c
		x=x>>1;
	}
}
long long kj(long long z) {
	int i,j;
	gk(z);
	for(i=1; i<=k+1; i++) {
		A[k+1]+=c2[k+1][i]*A[i];
		A[k+1]%=p;
	}
}

DveC++上运行连个输出都没。 有人可以帮我解决吗?谢谢。

2024/4/4 11:06
加载中...