暴力枚举所有可能 ,也就只有2的25次方;
关键在于如何去除可旋转得到的重复方案,这里我直接模拟方案的旋转,
然后查找旋转所可以得到的四个方案是否在set里,如果一个都没有说明是新的方案
即可放入set
#include<bits/stdc++.h>
using namespace std;
set<string>q;
int mp[6][6]={{0,0,0,0,0,0},
{0,1,2,3,4,10},
{0,4000,5,6,50,20},
{0,3000,6000,7000,60,30},
{0,2000,5000,600,500,40},
{0,1000,400,300,200,100},
};
void dfs(int x,int y,vector<int>a){
if(a.size()==5){
int sum=0;
int t=a[0];
char tmp[30];
string str="";
int flag=0;
for(int j=0;j<4;j++){
sort(a.begin(),a.end());
str="";
for(int i=0;i<5;i++){
sprintf(tmp,"%d",a[i]);
str+=tmp;
if(a[i]!=7000){
a[i]=a[i]*10;
if(a[i]>=10000){
a[i]/=10000;
}
}
}
if(q.find(str)!=q.end()){
flag=1;
break;
}
}
if(flag==0)
q.insert(str);
return;
}
if(y==5){
y=1;
if(x<5)
{
x++;
}else{
return;
}
}else{
y++;
}
dfs(x,y,a);
a.push_back(mp[x][y]);
dfs(x,y,a);
}
int main(){
vector<int>a;
dfs(1,0,a);
cout<<q.size();
}