社区讨论

WA2,铅条

P1397[NOI2013] 矩阵游戏参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mdmjwyev
此快照首次捕获于
2025/07/28 11:31
7 个月前
此快照最后确认于
2025/07/28 11:43
7 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
char m1[1000010],n1[1000010];
long long a,b,c,d,l1,l2,n,m;
struct jz{
	long long t[100][100];
}ans,A,B,C;
jz jzcf(jz x, jz y){
    jz z;
    for(int i=0;i<2;i++){
        for(int j=0;j<2;j++){
            z.t[i][j] = 0;
            for(int k=0;k<2;k++){
                z.t[i][j] = (z.t[i][j] + (x.t[i][k]*y.t[k][j])%mod)%mod;
            }
        }
    }
    return z;
}
jz ksm(jz u,int v){
	jz w;
	for(int q=0;q<2;q++){
		for(int p=0;p<2;p++){
			w.t[q][p]=0;
		}
		w.t[q][q]=1;
	}
	while(v!=0){
		if(v%2==1) w=jzcf(w,u);
		u=jzcf(u,u);
		v=v/2;
	}
	return w;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n1>>m1>>a>>b>>c>>d;
	A.t[0][0]=a,A.t[0][1]=b;
	A.t[1][0]=0,A.t[1][1]=1;
	B.t[0][0]=c,B.t[0][1]=d;
	B.t[1][0]=0,B.t[1][1]=1;
	l1=strlen(n1),l2=strlen(m1);
	if(a!=1){
		for(int i=0;i<l2;i++){
			m=(m*10+m1[i]-'0')%(mod-1);
		}
		m=(m-1+mod-1)%(mod-1);
		C=ksm(A,m);
		ans=jzcf(B,C);
		if(ans.t[0][0]==1){
			for(int i=0;i<l1;i++){
				n=(n*10+n1[i]-'0')%mod;
			}
			n=(n-1+mod)%mod;
			ans.t[0][1]=(ans.t[0][1]*n);
			ans=jzcf(C,ans);
			cout<<(ans.t[0][0]+ans.t[0][1])%mod;
		}
		else{
			for(int i=0;i<l1;i++){
				n=(n*10+n1[i]-'0')%(mod-1);
			}
			n=(n-1+mod-1)%(mod-1);
			ans=jzcf(C,ksm(ans,n));
			cout<<(ans.t[0][0]+ans.t[0][1])%mod;
		}
	}
	else{
		for(int i=0;i<l2;i++){
			m=(m*10+m1[i]-'0')%mod;
		}
		m=(m-1+mod)%(mod);
		A.t[0][0] = 1;
		A.t[0][1] = b*m;
		A.t[1][0] = 0;
		A.t[1][1] = 1;
		C=jzcf(B,A);
		if(C.t[0][0]==1){
			for(int i=0;i<l1;i++){
				n=(n*10+n1[i]-'0')%mod;
			}
			n=(n-1+mod)%mod;
			C.t[0][1]=(C.t[0][1]*n);
			C=jzcf(A,C);
			cout<<(C.t[0][0]+C.t[0][1])%mod;
		}
		else{
			for(int i=0;i<l1;i++){
				n=(n*10+n1[i]-'0')%(mod-1);
			}
			n=(n-1+mod-1)%(mod-1);
			ans=jzcf(A,ksm(C,n));
			cout<<(ans.t[0][0]+ans.t[0][1])%mod;
		}
	}
	return 0;
}


回复

0 条回复,欢迎继续交流。

正在加载回复...