All pastes #829138 Raw Edit

Unnamed

public cpp v1 · immutable
#829138 ·published 2007-12-22 23:04 UTC
rendered paste body
/*ID: SupoPROG: msquareLANG: C++*///DEDICATED TO EMMA WATSON, THE BRITISH *SUNSHINE*#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <ctime>#include <fstream>#define eps 10e-10#define INF 10e15#define PI 3.141592653589793238462#define EU 2.71828182845904523536#define sz(a) (int)a.size()#define pb(a) push_back(a)#define mset(a,hodnota) memset(a,hodnota,sizeof(a))#define wh(a) a.begin(),a.end()#define REP(i,n) for(__typeof(n) i=0;i<(n);++i)#define REPS(i,n) for(int(i)=0;i<int(n.size());++i)#define FOR(i,a,b) for(__typeof(b) i=(a);i<=(b);++i)#define FORD(i,a,b) for(__typeof(a) i=(a);i>=(b);--i)#define FORE(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();++it)#define pii pair<int,int>#define mp(a,b) make_pair(a,b)#define fi first#define se secondtypedef long long ll;using namespace std;ifstream fin ("msquare.in");ofstream fout ("msquare.out");#define bigPrime 1000003int table[bigPrime];int intToMine(int a){  int ans=0;	REP(i,8)	{	 ans<<=3;   ans+=(a%10)-1;	 a/=10;	}   return ans;}void outpt(string prefix,int a){	cout<<prefix<<" ";	REP(i,8)	{   cout<<((a&7)+1)<<" ";	 a>>=3;	}  cout<<endl;	}int kde[3][8]={0,1,2,3,4,5,6,7, 3,0,1,2,5,6,7,4, 0,6,1,3,4,2,5,7};inline int op(int ktora,int cur){	 int ans=0;	 REP(i,8)	 		 ans<<=3,		 ans+=((cur>>(kde[ktora][i]*3))&7);		 	 return ans;		 	 }map<int,int> seen;bool visited(int x){  return seen.find(x)!=seen.end();}void mark(int x,int c){  seen[x]=c;}string getOp(int prev,int next){  REP(i,3)		if (next==(i==0?op(i,prev):op(0,op(i,prev))))			return string(1,'A'+i);	return "X";}int main( ){  int target=0,start=0;	char c;  REP(i,8)    fin>>c,target<<=3,target+=c-'1',start<<=3,start+=i;  target=op(0,target);  start=op(0,start);	outpt("tar : ",target);  outpt("tar : ",start);	outpt("testik1 : ",op(0,target));	outpt("testik2 : ",op(0,op(1,target)));	outpt("testik3 : ",op(0,op(2,target)));		deque<int> Q;	Q.pb(start);	seen[start]=start;	while(sz(Q))	{		int cur=Q.front();		if (cur==target)			 break;		Q.pop_front();	  REP(i,3)    {					  int novy=i==0?op(i,cur):op(0,op(i,cur));      if (!visited(novy))			{			  mark(novy,cur);				Q.pb(novy);			}		}			}  int cur=target;	string s="";	  do	{	  s=getOp(seen[cur],cur) + s;		cur=seen[cur];	}while(cur!=start);	if (s=="X")		fout<<0<<endl<<endl;	else	{	  fout<<sz(s)<<endl;	  fout<<s<<endl;	}  return 0;}