PKU3221 - Diamond Puzzle

3221 -- Diamond Puzzle
最近あんまPKUに時間がとれなくて、気がついたら新しい問題来てたのでやってみた。


変形15パズル。駒が7個しかなくメモリ制限も緩いので、階乗進法とか使わなくてもいけた。

v['d  '],q[9999]={123456},a,i,x,y,t;
char s[9];
main(b){
  for(v[*q]=1;a<b;a++)
    for(i=10;--i;!v[t=s[x]-48&&s[y]-48?0:atoi(s)]?v[q[b++]=t]=v[q[a]]+1:0)
      sprintf(s,"%07d",q[a]),s[x=(i<7)*i]^=s[y=i<7?i%6+1:i-6<<1]^=s[x]^=s[y];
  for(gets(s);~scanf("%d",&a);)
    printf("%d\n",v[a]-1);
}

(X)*2^nをシフトで書くと()が外せるってのはKnight MovesでのOzyさんのコードを見て勉強しましたm(_ _)m


相変わらずの更新速度ですが、RSSリーダが主流になってきたから、以前なら更新されないと見ないようになったけど、逆につまんない記事を書かなければ更新速度なんてどうでもいいんじゃないかとかぐだぐだ考える今日この頃。