题目链接
题目大意
给你一个二阶魔方,问你转n次最多转出多少个面。
解题思路
啥都不说了… … …搜就完了… … …
这代码打的我有点上头
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[40],ans,n;
int F()
{
int x=0;
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3])x++;
if(a[16]==a[17]&&a[17]==a[18]&&a[18]==a[19])x++;
if(a[8]==a[9]&&a[9]==a[14]&&a[14]==a[15])x++;
if(a[6]==a[7]&&a[7]==a[12]&&a[12]==a[13])x++;
if(a[4]==a[5]&&a[5]==a[10]&&a[10]==a[11])x++;
if(a[22]==a[23]&&a[23]==a[20]&&a[20]==a[21])x++;
return x;
}
void qian1()
{
int tmp1=a[16],tmp2;
a[16]=a[18];a[18]=a[19];a[19]=a[17];a[17]=tmp1;
tmp1=a[10];tmp2=a[11];
a[10]=a[21];a[11]=a[20];a[20]=a[15];a[21]=a[14];
a[15]=a[13];a[14]=a[12];a[12]=tmp1;a[13]=tmp2;
}
void qian2()
{
int tmp1=a[16],tmp2;
a[16]=a[17];a[17]=a[19];a[19]=a[18];a[18]=tmp1;
tmp1=a[10];tmp2=a[11];
a[10]=a[12];a[11]=a[13];a[12]=a[14];a[13]=a[15];
a[15]=a[20];a[14]=a[21];a[20]=tmp2;a[21]=tmp1;
}
void zuo1()
{
int tmp1=a[5],tmp2;
a[5]=a[4];a[4]=a[10];a[10]=a[11];a[11]=tmp1;
tmp1=a[0];tmp2=a[2];
a[0]=a[20];a[2]=a[22];a[22]=a[18];a[20]=a[16];
a[18]=a[12];a[16]=a[6];a[6]=tmp1;a[12]=tmp2;
}
void zuo2()
{
int tmp1=a[5],tmp2;
a[5]=a[11];a[11]=a[10];a[10]=a[4];a[4]=tmp1;
tmp1=a[0];tmp2=a[2];
a[0]=a[6];a[2]=a[12];a[6]=a[16];a[12]=a[18];
a[16]=a[20];a[18]=a[22];a[22]=tmp2;a[20]=tmp1;
}
void shang1()
{
int tmp1=a[20],tmp2;
a[20]=a[22];a[22]=a[23];a[23]=a[21];a[21]=tmp1;
tmp1=a[4];tmp2=a[10];
a[4]=a[1];a[10]=a[0];a[0]=a[9];a[1]=a[15];
a[9]=a[19];a[15]=a[18];a[18]=tmp1;a[19]=tmp2;
}
void shang2()
{
int tmp1=a[20],tmp2;
a[20]=a[21];a[21]=a[23];a[23]=a[22];a[22]=tmp1;
tmp1=a[4];tmp2=a[10];
a[4]=a[18];a[10]=a[19];a[18]=a[15];a[19]=a[9];
a[15]=a[1];a[9]=a[0];a[1]=tmp1;a[0]=tmp2;
}
void dfs(int sum)
{
if(ans==6)
return ;
if(sum<=n)
{
ans=max(ans,F());
}
if(sum==n)
return ;
for(int i=1;i<=6;i++)
{
if(i==1)
{
qian1();
dfs(sum+1);
qian2();
}
if(i==2)
{
zuo1();
dfs(sum+1);
zuo2();
}
if(i==3)
{
shang1();
dfs(sum+1);
shang2();
}
if(i==4)
{
qian2();
dfs(sum+1);
qian1();
}
if(i==5)
{
zuo2();
dfs(sum+1);
zuo1();
}
if(i==6)
{
shang2();
dfs(sum+1);
shang1();
}
}
}
int main()
{
while(~scanf("%d",&n))
{
ans=0;
for(int i=0; i<24; i++)
scanf("%d",&a[i]);
dfs(0);
printf("%d\n",ans);
}
return 0;
}