垒骰子(矩阵快速幂)

题目描述:

解题说明:

AC代码:

#include
#define ag(x) ((x)>3?(x)-3:(x)+3)
using namespace std;
typedef long long ll;
ll mod=1e9+7; 
struct matrix{
	int n,m;
	ll s[10][10];
};
matrix Aunit(matrix A){
	for(int i=0;i<6;i++){
		for(int j=0;j<6;j++){
			A.s[i][j]=4;
		}
	}
	return A;
}
matrix unit(matrix A){
	matrix re;
	re.n=A.n;re.m=A.m;
	for(int i=0;i>=1;
	}
	return re;
}
int main(){
	ll n,m;
    scanf("%lld%lld",&n,&m);
    matrix A;A.n=6;A.m=6;
	A=Aunit(A);
	int ip1,ip2;
	while(m--){
		scanf("%d%d",&ip1,&ip2);
		A.s[ip2-1][ag(ip1)-1]=0;
		A.s[ip1-1][ag(ip2)-1]=0;
	}
	matrix p;p.n=1;p.m=6;
	for(int j=0;j<6;j++)p.s[0][j]=4;
	A=dpow(A,n-1);
    p=mix(p,A);
    ll ans=0;
    for(int j=0;j<6;j++)ans=(ans+p.s[0][j])%mod;
	printf("%lld\n",ans);
	return 0;
}

你可能感兴趣的:(数论)