在线等挺急的。。
#include<bits/stdc++.h>
using namespace std;
map<int,bool>f;
int i,l,r=1,x,xx,xxx,ff;
struct usb{
int n,sum,pred;
char c;
}a[500000];
void turn_around(int k)
{
if(a[k].pred!=-1)turn_around(a[k].pred);
if(a[k].pred!=-1)cout<<a[k].c;
return;
}
void ok_print(int x)
{
cout<<a[x].sum<<endl;
ff=1;
turn_around(x);
cout<<endl;
return;
}
void f1(int k)
{
int an=k%10000;
int bn=k/10000;
int d=an*10000+bn;
if(f[d]==1)return;
f[d]=1;
r++;
a[r].pred=l;
a[r].c='A';
a[r].n=d;
a[r].sum=a[l].sum+1;
if(d==x)ok_print(r);
return;
}
void f2(int k)
{
int an=k%10000;
int bn=k/10000;
an=an/10+((an%10)*1000);
bn=bn/10+((bn%10)*1000);
int d=an*10000+bn;
if(f[d]==1)return;
f[d]=1;
r++;
a[r].pred=l;
a[r].c='B';
a[r].n=d;
a[r].sum=a[l].sum+1;
if(d==x)ok_print(r);
return;
}
void f3(int k)
{
int aa=k%10,bb=(k%100)/10,cc=(k%1000)/100,dd=(k%10000)/1000,ee=(k%100000)/10000,ff=(k%1000000)/100000,gg=(k%10000000)/1000000,hh=(k%100000000)/10000000;
int d=aa+ff*10+bb*100+dd*1000+ee*10000+gg*100000+cc*1000000+hh*1000000000;
if(f[d]==1)return;
f[d]=1;
r++;
a[r].pred=l;
a[r].c='C';
a[r].n=d;
a[r].sum=a[l].sum+1;
if(d==x)ok_print(r);
return;
}
int main()
{
for(int i=1;i<=8;i++)
{
cin>>xx;
xxx=xxx*10+xx;
}
x=xxx/10000;
xxx%=10000;
x=x*10000+(xxx%10*1000)+(xxx%100/10*100)+(xxx/100%10*10)+(xxx/1000);
if(x==12348765){cout<<0<<endl;return 0;}
f[12348765]=1;
a[1].n=12348765;
a[1].pred=-1;
while(l!=r)
{
l++;
f1(a[l].n);
if(ff==1)return 0;
f2(a[l].n);
if(ff==1)return 0;
f3(a[l].n);
if(ff==1)return 0;
}
return 0;
}