PKU 3087 Shuffle'm Up

http://poj.org/problem?id=3087
シャッフルのシミュレーションをして目的の状態に辿りつけるかどうかを判定するような問題。

やや易。

愚直にやって、適当な回数のシャッフルで打ち切っても余裕で通りました。

main(){
  int dat;
  cin>>dat;
  rep(tt,dat){
    cout<<tt+1<<' ';
    int c;
    cin>>c;
    string s1,s2,s12;
    cin>>s1>>s2>>s12;
    int ans=0;
    while(++ans<50 && s1+s2!=s12){
      string ns12;
      rep(i,c*2){
	if(i&1)ns12+=s1[i/2];
	else ns12+=s2[i/2];
      }
      s1=ns12.substr(0,c);
      s2=ns12.substr(c);
    }
    if(ans==50)ans=0;
    cout<<ans-1<<endl;
  }
}