poj3087Shuffle'm Up

7533 ワード

http://poj.org/problem?id=3087
一つの模擬問題が長い間振り回された.


View Code
 1 #include <iostream>

 2 #include<cstdio>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<map>

 6 using namespace std;

 7 map<string,int>ff;

 8 int main()

 9 {

10     int i,j,k,n;

11     char s1[110],s2[110],s[300],ss[300];

12     cin>>n;

13     for(i = 1; i <= n ; i++)

14     {

15         cin>>k;

16         getchar();

17         gets(s1);

18         gets(s2);

19         gets(s);

20         int k1 = 0,k2=0,num=0;

21         cout<<i<<" ";

22         while(1)

23         {

24             k1 = 0;

25             k2 = 0;

26             num++;

27             for(j = 0 ; j < 2*k ;j++)

28             {

29                 if(j%2==0)

30                 ss[j] = s2[k1++];

31                 else

32                 ss[j] = s1[k2++];

33             }

34             ss[2*k] = '\0';

35             if(strcmp(ss,s)==0)

36             {

37                 cout<<num<<endl;

38                 break;

39             }

40             if(ff[ss])

41             {

42                 cout<<"-1"<<endl;

43                 break;

44             }

45             ff[ss] = 1;

46             for(j = 0 ; j < k ; j++)

47             s1[j] = ss[j];

48             for(j = k ; j < 2*k ; j++)

49             s2[j-k] = ss[j];

50         }

51     }

52     return 0;

53 }