题目描述:
解题说明:
AC代码:
#include<bits/stdc++.h> #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<re.n;i++){ for(int j=0;j<re.m;j++){ if(i==j)re.s[i][j]=1; else re.s[i][j]=0; } } return re; } matrix mix(matrix A,matrix B){ matrix re;re.n=A.n;re.m=B.m; for(int i=0;i<re.n;i++){ for(int j=0;j<re.m;j++){ re.s[i][j]=0; for(int k=0;k<A.m;k++){ re.s[i][j]+=A.s[i][k]*B.s[k][j]%mod; re.s[i][j]%=mod; } } } return re; } matrix dpow(matrix A,ll b){ matrix re; re=unit(A); while(b){ if(b&1)re=mix(re,A); A=mix(A,A); b>>=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; }