蓝桥杯试题——垒骰子
#include<iostream>
using namespace std;
int N,M;
struct op
{
int m;
int n;
};
op OP[1000000];
int Opposite(int n){
if(n==1) return 4;
else if(n==2) return 5;
else if(n==3) return 6;
else if(n==4) return 1;
else if(n==5) return 2;
else if(n==6) return 3;
}
int f(int m,int n){
for(int i=0;i<M;i++)
{
if(OP[i].m==m&&OP[i].n==n||OP[i].m==n&&OP[i].n==m)
return 0;
}
return 1;
}
long long int dfs(int n,int N1){
int num = 0;
if(n==0) return 1;
int N2=Opposite(N1);
for(int i=1;i<=6;i++){
if(f(i,N2))
num+=dfs(n-1,i)*4;
num=num%1000000007;
}
return num%1000000007;
}
int main() {
cin>>N>>M;
for(int i=0;i<M;i++){
cin>>OP[i].m>>OP[i].n;
}
long long int ans = dfs(N,0);
cout<<ans<<endl;
return 0;
}
测试样例能过,具体是不是所有都能过还不确定😗